gpt4 book ai didi

clojure - Clojure 中点运算符和完全限定命名调用之间的区别

转载 作者:行者123 更新时间:2023-12-02 23:43:56 25 4
gpt4 key购买 nike

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

要获取给定键的值,代码使用 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*)

关于clojure - Clojure 中点运算符和完全限定命名调用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com