我在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。
答案 0 :(得分:8)
Clojure函数的内联定义为编译器提供了将操作符视为宏而不是函数的选项。麻烦的是你必须提供一个独特的宏主体,它与功能主体没有任何共同之处。您可以定义实际执行+
的{{1}}的可嵌入版本!
这是非常可疑的,而且没有记载。它似乎用于为小型核心功能生成更快的代码。
相比之下,在C ++中,-
提示编译器考虑函数调用的内联扩展。 内联扩展需要具有与普通函数调用相同的语义。 Accessor和mutator函数通常是内联的。
确实找到Clojure语言的一个方面,其语义与相应的C ++相比更为奇怪。
我认为该功能已被弃用。它不是。它是类似的inline
运算符 - 不推荐使用 - 但是 experimental 。要弃用,必须首先建立,并且从未达到过那个阶段。
我非常感谢Alan Malloy对上述更正的评论。