如何在嵌套结构中检查正则表达式相等性?
(= #"." #".") ;; #=> false
(= [#"."] [#"."]) ;; #=> false
(= ["."] ["."]) ;; #=> true
我认为正则表达式是一个值对象。
因此,两个正则表达式如果字面上相等则相等。
是否可以更新 =
函数以支持正则表达式相等性?
也许像这样
(defprotocol IEquals
(equals [a b]))
(extend-protocol IEquals
Object
(equals [a b] (.equals a b))
Pattern
(equals [a b]
(and
(instance? Pattern b)
(= (str a) (str b)))
并且 clojure.lang.Util.equiv
使用
IEquals#equals
而不是 Object#equals
。
但我不知道如何从 clojure.lang.Util
中调用协议方法。