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

欢迎!有关该功能如何运作的更多信息,请参阅关于页面。

+2
core.match
重新标记

似乎存在一个bug,其中一条规则使用`:only`限定符以确保map具有特定的键集。如果匹配的值是向量,将抛出`ClassCastException`异常。

以下是一个按预期工作且不使用`:only`的示例。

(let [x []]
  (match [x]
    [{:k v}] :a-map
    :else :not-a-map))
=> :not-a-map

如果我们稍作修改以添加`:only`,则会抛出未预期的错误。

(let [x []]
  (match [x]
    [({:k v} :only [:k])] :a-map
    :else :not-a-map))
;; Execution error (ClassCastException) at ...
;; clojure.lang.PersistentVector cannot be cast to java.util.Map

Slack用户@FiVo指出,为map模式生成的形式将对任何值为`ILookup`的项执行map检查,但如果使用`:only`限定符,则检查可能包括对`.keySet`的调用。

建议将此处对ILookup的引用更改为`IPersistentMap`。经过此更改,CLJ测试仍然通过。

1 答案

0
欢迎使用Clojure问答社区,您可以在这里提问并获得Clojure社区成员的帮助。
...