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

时间:2017-05-30 11:28:17

标签: clojure

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

.then((responseData) => {    
    var arrayOutput=[];
    arrayOutput.push(responseData);
    this.setState({
        saveArray: arrayOutPut,
    });
})

(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"} ..... 做了什么?

更新:还找到了很好的示例here

1 个答案:

答案 0 :(得分:8)

Clojure函数的内联定义为编译器提供了将操作符视为宏而不是函数的选项。麻烦的是你必须提供一个独特的主体,它与功能主体没有任何共同之处。您可以定义实际执行+的{​​{1}}的可嵌入版本!

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

相比之下,在C ++中,-提示编译器考虑函数调用的内联扩展。 内联扩展需要具有与普通函数调用相同的语义。 Accessor和mutator函数通常是内联的。

确实找到Clojure语言的一个方面,其语义与相应的C ++相比更为奇怪。

我认为该功能已被弃用。它不是。它是类似的inline运算符 - 不推荐使用 - 但是 experimental 。要弃用,必须首先建立,并且从未达到过那个阶段。

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