请在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

Cryptocurrency made by: glchapman

我认为这基本上是 MATCH-105 的特殊案例

0

Comment made by: crestani

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

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