Sto imparando Clojure. Ancora non ho capito bene per la lingua e la filosofia.Differenza tra operatore punto e chiamata con nome completo in Clojure
Ma voglio essere più familiare con la lingua. Quindi Ho iniziato a leggere la documentazione dell'API core Clojure e ho trovato alcuni elementi interessanti nel codice sorgente 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))))
per ottenere un valore con data chiave il codice utilizza clojurelang.RT/get
funzione. Il codice chiama operatore punto - (. clojure.lang.RT (get map key))
.
La mia domanda è perché l'autore ha scritto (. clojure.lang.RT (get map key))
anziché (clojure.lang.RT/get map key)
.
C'è qualche differenza tecnica? o qualche beneficio?
La sintassi 'classname/method' è stata definita prima della definizione? La mia ipotesi sarebbe che 'clojure.lang.RT/get' sarebbe un errore di sintassi a questo punto della compilazione. – ToBeReplaced
Il codice '' clojure.core'' probabilmente non è un buon punto di partenza per comprendere la filosofia del linguaggio, perché tende a utilizzare le forme di livello più basso. Sarai più interessato a librerie consolidate come ad esempio ring per un'astrazione HTTP pulita (https://github.com/mmcgrana/ring/) o compojure per un DSL di routing (https://github.com/weavejester/compojure) – sw1nn