欢迎!请参阅关于页面以了解更多关于这个问答功能的信息。
错误报告
(defn f [] 1) => #'cljs.user/f (= f (with-meta f {:a 1})) => false ;; should be true
参考:https://clojure.net.cn.reference/metadata"元数据不会影响等价性"
页面也说明:“仅元数据不同的两个对象是相等的”以及“具有不同元数据的对象是不同的对象。”
因此,当依赖于对象身份时,等价性是真的“受到影响的”。例如,对于编译后的函数:(not= (fn []) (fn [])),无论元数据如何。
(not= (fn []) (fn []))
可能需要澄清。
我认为这不是一个错误,它的行为与JVM Clojure相同。
函数没有值语义,所以它们的 = 实现退回到对象引用比较。
=
当你向函数添加元数据时,它成为一个不同的函数对象,因此 = 返回 false。