如果我有一个自定义类型,并使用它创建两个具有完全相同值的单独实例,那么我可以使用什么方法来确定这两个实例是等价的?`identical?`、`=`和`==`似乎都不起作用。我本来希望有一些协议来设置类型比较。最终,我希望无法将等价的内容添加到集合中。
(deftype Ref [id])
(def r1 (->Ref 1))
(def r2 (->Ref 1))
(= r1 r2) ;false rather than true
(def refs #{})
(conj refs r1 r2) ;adds both, but want one
=
可以与 defrecord
一起使用,但是如何为 deftype
定义 =
呢?
==
只适用于数字数据。user> (== :a :a) => ClassCastException clojure.lang.Keyword cannot be cast to java.lang.Number clojure.lang.Numbers.equiv (Numbers.java:206)
- noisesmith