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

欢迎!请访问关于页面以了解更多关于如何使用本站的信息。

+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,我得到相同的结果。然而,将 match 改为 seq match 可以得到正确的结果

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

所以可能是向量模式之间的坏交互。

0

评论人:carkh

我刚刚用clojure 1.7测试过,得到相同的结果

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