在Clojurescript中(相同?a b)是如何实现的?

在Clojurescript中(相同?a b)是如何实现的?,clojure,clojurescript,Clojure,Clojurescript,我只是好奇,环顾四周,Javascript似乎没有Java那样的equals()方法。此外,如果两个运算符是同一项,则不能使用==或==检查。那么Clojurescript怎么会有一个=和一个相同的?操作符呢 另外,我应该期望相同吗?比Clojurescript中的=快很多吗?它看起来只是=的一个宏 根据@dnolen的评论进行更新 它也是一个函数,只调用==: 以下是来自以下方面的快速结果: 它也是作为一个普通函数提供的-宏用于处理内联情况。@dnolen Cool,更新了我的答案以反映这一

我只是好奇,环顾四周,Javascript似乎没有Java那样的
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))