clojurescript中作为映射键的记录
在Clojure中,使用原始键或新构造的键查找值会返回所需的值。但是,在Clojurescript中,使用新构造的键返回null/nil。让Clojurescript中的查找与Clojure中的查找一样有效的最佳方法是什么?看起来我必须为Clojurescript中的记录实现等于自己:clojurescript中作为映射键的记录,clojure,clojurescript,Clojure,Clojurescript,在Clojure中,使用原始键或新构造的键查找值会返回所需的值。但是,在Clojurescript中,使用新构造的键返回null/nil。让Clojurescript中的查找与Clojure中的查找一样有效的最佳方法是什么?看起来我必须为Clojurescript中的记录实现等于自己: (defrecord Pot [a]) (def p (Pot. 1)) (def m {p 2}) (m p) ; Returns 2 in both Clojure and Clojurescript
(defrecord Pot [a])
(def p (Pot. 1))
(def m {p 2})
(m p) ; Returns 2 in both Clojure and Clojurescript
(m (Pot. 1)) ; Returns 2 in Clojure and nil/null in Clojurescript
这个很好用。我本以为Clojurescript会在默认情况下为记录实现equals。只是在运行当前主机的Clojurescript REPL上尝试了这一点,它可以按预期工作。你会用过时的版本吗?谢谢。这很有效。我还遇到了一个问题,就是我在命名空间中声明的任何记录都不能正常工作。我尝试清理我的“out”目录,最终从头开始创建了一个新项目,这就解决了这个问题。
(defrecord Pot [a])
(extend-type Pot
IEquiv
(-equiv [this that] (and (instance? Pot that) (= (into {} this) (into {} that)))))