【发布时间】:2015-02-18 20:29:08
【问题描述】:
作为一个例子,希望能比我用语言更好地说明事情:
(let [{:keys [a b c] :or {a 1 b 2 c 3} :as m} {}]
(println a b c) ; => works as expected, output is: 1 2 3
(println m) ; => this doesn't work, output is: {}
)
我希望第二个 println 的输出是包含默认值的映射,就好像被合并推到那里一样(即 {:a 1 :b 2 :c 3})。
相反,在 m 被绑定之后,看起来 vars 正在被召唤和 or'd。为什么 :as 不受 : 或 :keys 的影响?
我的心智模型有什么问题?我应该如何看待这个?
编辑:
我想出了它是如何工作的,就像我在上面展示的那样(尽管感谢链接)。从那以后,我也通读了 clojure.core/destructure 的源代码,现在确切地知道它在做什么。我的问题真的是“为什么?”
在 Clojure 中,事情以它们的方式运行似乎总是有原因的。他们在这里做什么?
很抱歉,问题是“解构如何与 :as 和 :or 一起工作”。
【问题讨论】:
标签: clojure