欢迎!请查看关于页面,了解更多关于这个网站如何运作的信息。
错误报告
(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 []))
可能需要澄清。
我认为这不是一个bug。它的表现与JVM Clojure相同。
函数没有值语义,因此它们的“=”实现退回到对象引用比较。
当你向函数添加元数据时,它将变成一个不同的函数对象,因此“=”返回false。