欢迎!请参阅 关于 页了解更多如何使用本站的信息。
错误报告
(defn f [] 1) => #'cljs.user/f (= f (with-meta f {:a 1})) => false ;; should be true
根据: https://clojure.org/reference/metadata"元数据不会影响相等性"
页面还表明:“只有元数据不同的两个对象是相等的”,以及“具有不同元数据的对象是不同的对象”。
因此,在依赖于对象标识的情况下,相等性确实会受到“影响”。例如,对于编译后的函数:(not= (fn []) (fn [])),不管元数据如何。
(not= (fn []) (fn []))
这可能需要一些解释。
我认为这不算是一个错误。它的行为和JVM的Clojure一样。
函数没有值语义,所以它们的实现`=`是回退到对象引用比较。
当你向函数添加元数据时,它变成了一个不同的函数对象,因此`=`返回false。