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

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

0
core.match

这三个表达式都应该工作(根据 @dnolen 在 IRC 中的说法)

user> (match/match [5] [((:or 5 6) :as x)] x) CompilerException java.lang.RuntimeException: Unable to resolve symbol: x in this context user> (match/match [5] [(:or (5 :as x) (6 :as x))] x) 5 user> (match/match [5] [(:or (5 :as x) (6 :as y))] x) CompilerException java.lang.RuntimeException: Unable to resolve symbol: x in this context

第一个对我来说是有意义的,但后两个不;例如,在最后一个例子中是否应该 {{y}} 是 {{nil}},或者其他什么?

尽管这不是必须的,但如果以下“糖化”形式也能工作就好了

user> (match/match [5] [(:or 5 6 :as x)] x) CompilerException java.lang.RuntimeException: Unable to resolve symbol: x in this context

3 答案

0

评论者:glchapman

同样的问题也会出现在 :guard 模式上

user=> (match/match 1 ($_ :guard odd?) :as n) n :else 0)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: n in this context

0

评论者:ticking

在与向量的 & 相关的问题中,也有一些奇怪的事情发生。

这是没有 & 的匹配向量行为的有效结果。

(match (link: [1 2 3]))

   (link: ([u v w) :as a)] a)

=> (link: 1 2 3)

这是添加剩余匹配结果。

(match (link: [1 2 3]))

   (link: ([h & r) :as a)] a)

=> (link: 1)

这两者都应该相同。

0
参考:https://clojure.atlassian.net/browse/MATCH-93(由 cemerick 报告)
...