Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojurescript中作为映射键的记录_Clojure_Clojurescript - Fatal编程技术网

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

在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

(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)))))