Frage

Ich versuche, die Syntax für den Aufruf Gebrauch zu verstehen, um eine Bibliothek zu laden:

(use 'clojure.contrib.duck-streams)

macht Sinn für mich, da es das Zitat Leser Makro gilt für Ströme clojure.contrib.duck so dass der Leser nicht versucht, die Zeichenfolge zu bewerten.

Nun, wenn ich verwenden möchte, die: Tag nur nur Last Leser, warum ist das richtig:

(use '[clojure.contrib.duck-streams :only (reader)])

statt:

(use '[clojure.contrib.duck-streams :only reader])

las ich diese meinen Pass in diesem Vektor der Argumente zu verwenden, aber die REPL klagt mit Weiß nicht, wie iseq von Symbol zu erstellen. Warum die Pars um Leser?

Dies ist auch gleichbedeutend mit der ersten Zeile und gültig:

(use '[clojure.contrib.duck-streams])

So scheint es, dass ‚string sind‘ [string] sind gleichwertige Argumente, die ich verstehe es auch nicht.

War es hilfreich?

Lösung

:only will eine Liste von Symbolen. Das ist nur, wie die Funktion geschrieben wird. Beachten Sie das docstring für refer, die use Anwendungen.

 refers to all public vars of ns, subject to filters.
 filters can include at most one each of:

 :exclude list-of-symbols
 :only list-of-symbols
 :rename map-of-fromsymbol-tosymbol

Es ist auf diese Weise geschrieben, so dass Sie mehr als ein Symbol angeben können, wenn Sie wollen.

(use '[clojure.contrib.duck-streams :only (reader writer)])

Wie in diesen kürzlich erschienenen Beitrag , wenn Sie eine Funktion schreiben, welche nimmt oder eine variable Anzahl von Argumenten zurückgibt, ist es eine gute Idee, eine Liste oder Vektor oder setzen sie immer haben nehmen / zurückkehren, auch wenn es unter / ein einzelnes Element zurück. Denn:

  • nil, häufig verwendet, um "null Punkte" darstellen, ist seqable. Leere Sammlungen sind auch seqable.
  • Zwei oder mehr Elemente in einer Liste sind seqable.
  • Es macht nur Sinn auch ein Element seqable sein haben, indem sie in eine Liste selbst setzen.

Es wäre umständlich die Ein-Punkt zu haben, falls ein Sonderfall sein. Es ist konsequenter und leichter zu programmieren, wenn Sie ein Element als eine Art von degenerierten Fall behandeln und sie in eine Liste werfen.

Beachten Sie, dass alle use kümmert sich geht darum, ob die :only Argument eine seqable Sammlung von Symbolen ist. Das bedeutet, Listen, Vektoren und setzt alle Arbeiten.

(use '[clojure.contrib.duck-streams :only [reader writer]])
(use '[clojure.contrib.duck-streams :only #{reader writer}])

Ein einzelner Symbol ist jedoch nicht seqable, weshalb Sie die Ausnahme erhalten Sie tun.

Schauen Sie in core.clj wenn Sie sehen wollen, wie dies alles umgesetzt werden.

Andere Tipps

Das ist nicht nur „Pars“ - Pars ist die Syntax für eine Liste erstellen. Es würde die Artikel angezeigt, nachdem die. Nur Tag erwartet Sie eine Liste der Dinge zu sein, es gilt für

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top