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}} 应该是 {{null}},还是其他什么?)

尽管这不必要,但下面的“糖化”形式如果能工作就更好了

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)

以下是添加了剩余匹配的结果。

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

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

=> (link: 1)

两者都应该相同。

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