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 汇报)
...