2024 年 Clojure 状态调查 中分享您的想法!

欢迎!请参阅 关于 页面,了解更多关于其如何运作的信息。

0
core.match
通过正则表达式与地图中不存在的键匹配地图值时,{{core.match}} 会抛出异常。以下是一个示例:

{code:none}
(= 2 (match {:foo "bar"}
            {:bar #"bar"} 1
            :else 2))))
 

引发

{code:none}
java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.lang.CharSequence
 at clojure.core$re_matcher.invoke (core.clj:4460)
    clojure.core$re_matches.invoke (core.clj:4497)
...
 

因为 {{re-match}} 被调用了,使用了 {{:clojure.core.match/not-found}} 关键字,因为键未找到。

附加的补丁包含了一个测试用例和解决问题的方法,确保只有在找到了键时才调用 {{re-match}},否则温和地失败。

3 个答案

0

评论者:glchapman

我认为这基本上是 MATCH-105 的一个特例。

0

评论者:crestani

是的,您是对的。(链接: https://dev.clojure.org/jira/browse/MATCH-105 文本:MATCH-105) 更健壮,应该应用。

0
参考: https://clojure.atlassian.net/browse/MATCH-123(由 alex+import 报告)
...