我在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对上述更正的评论.
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |