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

欢迎!有关如何使用本站的更多信息,请查看关于页面。

+2
core.match

除非我弄错了,看起来 & 模式和 :as 模式之间存在一些交互问题

(match (link: [:bar :baz])
(link: ([:bar & r) :as m]) m)
-> (link: :bar)

我期望在这里看到 (link: :bar :baz)

这是我所预期的
(match (link: [:bar :baz])
(link: [:bar & r]) :a)
-> :a

这同样符合预期
(match (link: [:bar :baz])
(link: ([:bar :baz) :as m]) m)
-> (link: :bar :baz)

因此 & 和 :as 都是独立工作的。

我可以确认这个问题仍然存在于1.11.1版本中。另外,glchapman的解决方案可以处理这个问题,但我如果没有找到这个工单,我永远都不会猜到这个解决方案。

3 个答案

+1

评论者:glchapman

使用1.8,我得到了相同的结果。然而,将匹配改为序列匹配可以得到正确的结果

user=> (match [[:bar :baz]] [(([:bar & r] :seq) :as m)] m) [:bar :baz]

因此,可能坏交互是针对向量模式特定的。

0

评论者:carkh

我用clojure 1.7进行了测试,得到了相同的结果

0
参考: https://clojure.atlassian.net/browse/MATCH-112 (由 alex+import 报告)
...