什么是:Clojure函数中的inline关键字?

Ert*_*tin 8 clojure

我在Clojure的源代码中遇到过这段代码:

(defn ==
  "Returns non-nil if nums all have the equivalent
  value (type-independent), otherwise false"
  {:inline (fn [x y] `(. clojure.lang.Numbers (equiv ~x ~y)))
   :inline-arities #{2}
   :added "1.0"}
   .....
Run Code Online (Sandbox Code Playgroud)

怎么:inline办?

更新:此处也找到了很好的例子.

Thu*_*ail 10

Clojure函数的内联定义为编译器提供了将操作符视为宏而不是函数的选项.麻烦的是你必须提供一个独特的体,它与函数体没有任何共同之处.你可以定义一个+实际上做的无法实现的版本-!

这是非常可疑的,并且没有记录.它似乎用于为小型核心功能生成更快的代码.


通过对比,在C++中,inline是一个提示编译器考虑函数的任何调用的内联扩展.内联扩展需要具有与普通函数调用相同的语义.Accessor和mutator函数通常是内联的.

确实很难找到Clojure语言的一个方面,它具有soggier语义而不是相应的C++.


我认为该功能已被弃用.它不是.它是类似的definline运算符 - 不是弃用 - 而是实验性的.要弃用,必须首先建立它,并且它从未达到过那个阶段.


我非常感谢Alan Malloy对上述更正的评论.