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

这是添加 rest 匹配的结果。

(match (link: [1 2 3])

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

=> (link: 1)

这两者应该是相同的。

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