我正在學習Clojure。對於語言和哲學,我仍然沒有很好的理解 。Clojure中點運算符和完全合格的命名調用的區別
但我想更熟悉這門語言。因此 我已經開始閱讀Clojure核心API文檔 ,並在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))))
要獲得給定鍵的值,代碼使用clojurelang.RT/get
函數。代碼調用點運算符 - (. clojure.lang.RT (get map key))
。
我的問題是作者爲什麼寫(. clojure.lang.RT (get map key))
而不是 (clojure.lang.RT/get map key)
。
有沒有技術上的區別?或者任何好處?
在定義之前是否定義了'classname/method'語法?我的猜測是'clojure.lang.RT/get'在編譯的時候會是一個語法錯誤。 – ToBeReplaced 2013-03-13 02:41:17
'clojure.core''代碼可能不是開始理解語言哲學的好地方,因爲它傾向於使用最低級別的表單。你應該更好地查看一些完善的庫,比如環形的乾淨的HTTP抽象(https://github.com/mmcgrana/ring/)或者路由DSL的組合(https://github.com/weavejester/compojure) – sw1nn 2013-03-13 09:38:35