Uczę się Clojure. Nadal nie mam dobrego zrozumienia dla języka i filozofii.Różnica między operatorem kropki a pełnoprawnym nazwanym wywołaniem w Clojure
Ale chcę być bardziej obeznany z językiem. Stąd Zacząłem czytać główną dokumentację API Clojure i znalazłem kilka interesujących rzeczy w kodzie źródłowym clojure.core/get
.
(defn get
"Returns the value mapped to key, not-found or nil if key not present."
{:inline (fn [m k & nf] `(. clojure.lang.RT (get ~m ~k [email protected])))
:inline-arities #{2 3}
:added "1.0"}
([map key]
(. clojure.lang.RT (get map key)))
([map key not-found]
(. clojure.lang.RT (get map key not-found))))
Aby uzyskać wartość z podanym kluczem, kod wykorzystuje funkcję clojurelang.RT/get
. Kod wywołania operatora kropki - (. clojure.lang.RT (get map key))
.
Moje pytanie brzmi: dlaczego autor napisał (. clojure.lang.RT (get map key))
zamiast (clojure.lang.RT/get map key)
.
Czy są jakieś różnice techniczne? czy jakieś korzyści?
Czy składnia 'classname/method' została zdefiniowana przed definicją? Domyślam się, że 'clojure.lang.RT/get' będzie błędem składni w tym momencie kompilacji. – ToBeReplaced
Kod 'clojure.core'' prawdopodobnie nie jest dobrym miejscem do rozpoczęcia zrozumienia filozofii języka, ponieważ zazwyczaj używa formularzy najniższego poziomu. Lepiej zajrzyj do dobrze znanych bibliotek, takich jak ring dla czystej abstrakcji HTTP (https://github.com/mmcgrana/ring/) lub compojure dla routingu DSL (https://github.com/weavejester/compojure) – sw1nn