gpt4 book ai didi

clojure - "^:static"在 Clojure 中做什么?

转载 作者:行者123 更新时间:2023-12-02 17:50:48 24 4
gpt4 key购买 nike

我在 Clojure core.clj 源代码中看到了很多函数的 ^:static 元数据,例如在 seq? 的定义中:

(def
^{:arglists '([x])
:doc "Return true if x implements ISeq"
:added "1.0"
:static true}
seq? (fn ^:static seq? [x] (instance? clojure.lang.ISeq x)))

这个元数据到底有什么作用,为什么它在 core.clj 中如此频繁地使用?

最佳答案

在 Clojure 1.3 的开发中,Rich 希望添加函数返回除 Object 之外的类型的功能。这将允许使用 native 数学运算符,而不必将所有内容都塞进一个函数中。

原始实现要求支持此功能的函数被标记为:static。此元数据导致编译器生成该函数的两个版本,一个返回 Object,另一个返回该特定类型。如果编译器确定类型始终匹配,则将使用更具体的版本。

这后来变得完全自动化,因此您不再需要添加它。

关于clojure - "^:static"在 Clojure 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552632/

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