欢迎!请参阅关于页面以获取更多有关该方式的信息。
错误报告
(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相同。
函数没有值语义,所以它们的 != 实现回退到对象引用比较。
!=
当你向函数添加元数据时,它变成了一个不同的函数对象,因此 = 返回假。
=