【问题标题】:Records as map keys in clojurescript在 clojurescript 中记录为映射键
【发布时间】:2015-01-28 08:20:32
【问题描述】:
(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

在 Clojure 中,使用原始键或新构造的键查找值会返回所需的值。但是,在 Clojurescript 中,使用新构造的键返回 null/nil。像在 Clojure 中一样在 Clojurescript 中进行查找的最佳方法是什么?

【问题讨论】:

  • 刚刚在运行当前 master 的 ClojureScript REPL 上进行了尝试,它按预期工作。你可以使用过时的版本吗?
  • 谢谢。这样可行。我在命名空间中声明的任何记录都无法正常工作,我也遇到了问题。我尝试清理我的“out”目录并最终从头开始创建了一个新项目并修复了它。

标签: clojure clojurescript


【解决方案1】:

看来我必须自己为 clojurescript 中的记录实现 equals:

(defrecord Pot [a])

(extend-type Pot
  IEquiv
  (-equiv [this that] (and (instance? Pot that) (= (into {} this) (into {} that)))))

很好用。我原以为 Clojurescript 会默认为记录实现 equals。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多