如何在嵌套结构中检查正则表达式等价性?
(= #"." #".") ;; #=> 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
调用协议方法。