在Clojurescript中(相同?a b)是如何实现的?
我只是好奇,环顾四周,Javascript似乎没有Java那样的在Clojurescript中(相同?a b)是如何实现的?,clojure,clojurescript,Clojure,Clojurescript,我只是好奇,环顾四周,Javascript似乎没有Java那样的equals()方法。此外,如果两个运算符是同一项,则不能使用==或==检查。那么Clojurescript怎么会有一个=和一个相同的?操作符呢 另外,我应该期望相同吗?比Clojurescript中的=快很多吗?它看起来只是=的一个宏 根据@dnolen的评论进行更新 它也是一个函数,只调用==: 以下是来自以下方面的快速结果: 它也是作为一个普通函数提供的-宏用于处理内联情况。@dnolen Cool,更新了我的答案以反映这一
equals()
方法。此外,如果两个运算符是同一项,则不能使用==
或==
检查。那么Clojurescript怎么会有一个=
和一个相同的?
操作符呢
另外,我应该期望
相同吗?
比Clojurescript中的=
快很多吗?它看起来只是=
的一个宏
根据@dnolen的评论进行更新
它也是一个函数,只调用==
:
以下是来自以下方面的快速结果:
它也是作为一个普通函数提供的-宏用于处理内联情况。@dnolen Cool,更新了我的答案以反映这一点。我对回购协议的目录结构有点困惑,但我最终还是找到了它…呵呵,即使在阅读了你的源代码之后,我仍然感到困惑。“严格比较或抽象比较时,两个对象永远不相等”,后跟“仅当操作数引用同一对象时,比较对象的表达式才为真”。也许我的速度很慢,但我花了整整半分钟才弄明白这两种说法是怎么回事是的,他们本可以用更好的措辞:“对于严格或抽象的比较,两个唯一的对象实例永远不相等。”
cljs.user> =
#<function (a, b) {
return cljs.core._equiv.call(null, a, b)
}>
cljs.user> ==
#<function (a, d, e) {
switch(arguments.length) {
case 1:
return!0;
case 2:
return cljs.core._equiv.call(null, a, d);
default:
return b.apply(this, arguments)
}
throw"Invalid arity: " + arguments.length;
}>
cljs.user> identical?
#<function (a, b) {
return a === b
}>
(extend-type number
IEquiv
(-equiv [x o] (identical? x o))