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

欢迎!请参阅关于页面以了解更多有关此工作方式的信息。

+2
core.match

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

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

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

这 Exactly是我预期的
(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](https://clojure.atlassian.net/browse/MATCH-112)(由alexi+import报告)
...