问题就在这里
如果对象实现equiv,它将被 pick up by =
.
对于所有其他类型
两个参数是以deftype定义的相同类型。
调用类型的equiv方法,其返回值成为(=x y)的值。
对于其他类型,Java的x.equals(y)是true。
我敢打赌,如果你比较它们的seq强制转换上的=,你会发现序列是=...
(deftype wrapper [xs]
clojure.lang.IPersistentCollection
(equiv [this that] false)
clojure.lang.Seqable
(seq [this] (seq xs)))
user=> (let [xs (wrapper. [1 2 3])
ys (wrapper. [1 2 3])]
[(= xs ys) (= (seq xs) (seq ys))])
[false true]