我正在学习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 ~@nf)))
: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))))
Run Code Online (Sandbox Code Playgroud)
要使用给定键获取值,代码将使用clojurelang.RT/get函数.代码调用点运算符 - (. clojure.lang.RT (get map key)).
我的问题是作者为什么写(. clojure.lang.RT (get map key))而不是
(clojure.lang.RT/get map key).
有什么技术差异吗?还是有什么好处?
Clojure中的点用于主机互操作(在本例中使用Java类clojure.lang.RT).静态方法的惯用形式是(Classname/staticMethod args*)扩展为.特殊形式的调用.在get函数的情况下,您基本上是在查看Clojure实现的一部分.没有理由为什么低级Clojure代码会使用更高级别的宏 - 所以它.直接使用表单.
请查看以下文档:http://clojure.org/java_interop
惯用形式位于顶部和下方,您可以找到它们如何扩展为点运算符的调用.这是静态方法的相关位:
(Classname/staticMethod args*) ==> (. Classname staticMethod args*)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1501 次 |
| 最近记录: |