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.
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, istseq
able. Leere Sammlungen sind auchseq
able. - Zwei oder mehr Elemente in einer Liste sind
seq
able. - Es macht nur Sinn auch ein Element
seq
able 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 seq
able, 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