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

欢迎!欲了解更多关于这个平台的信息,请查看关于页面。

0
core.match

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

user> (match/match [5] [((:or 5 6) :as x)] x) CompilerException java.lang.RuntimeException: 无法解析符号:x 在当前上下文中 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: 无法解析符号:x 在当前上下文中

(第一个对我来说是有意义的,但后两者没有;例如,在最后一个例子中,{{y}}应该是{{nil}},还是其他的东西?)

虽然没有必要,但如果以下“简化的”形式也能工作,那就更好了

user> (match/match [5] [(:or 5 6 :as x)] x) CompilerException java.lang.RuntimeException: 无法解析符号:x 在当前上下文中

3个答案

0

评论由:glchapman 提出

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

user=> (match/match 1 ((_ :guard odd?) :as n) n :else 0)
CompilerException java.lang.RuntimeException: 无法解析符号:n 在当前上下文中

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)

=> (链接:1)

两者应相同。

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