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,我也得到了相同的结果。但是将 match 替换为 seq match 可以产生正确的结果

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)(由 alex+import 报告)
...