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

欢迎!请查看 关于 页面以获取更多有关此功能的信息。

+2
core.match
重新标记

似乎存在一个 Bug,其中子句使用 `:only` 特征以确保映射包含一组特定的键。如果要匹配的值是向量,将会抛出 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 识别到为映射模式生成的形式将在任何 ILookup 值上执行映射检查,但如果使用 `:only` 特征,则检查将包括对 `.keySet` 的调用。

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

1 答案

0
欢迎来到 Clojure Q&A,您可以在此提出问题并获得 Clojure 社区成员的解答。
...