我正在学习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