【发布时间】:2017-04-22 15:59:31
【问题描述】:
我在浏览一些Clojure source code 时遇到了这个功能:
(defn draw-mask [app-state [r c]]
(let [x1 (+ 25 (* c 50))
y1 (+ 25 (* r 50))]
[:circle {:cx x1 :cy y1 :r 12 :fill "white"}]))
我不明白[app-state [r c]] 是如何解析的。一个典型的数据结构将传递给它什么以及 defn 如何将其打包出来。 clojure 文档中对此的任何引用将不胜感激,尤其是因为 ClojureDocs.org was of no help on the subject。
【问题讨论】:
-
Iirc,所有破坏都使用
deconstruct(或类似的东西)宏。它只是将其转换为对列表的first、rest和nth的调用,以及对地图访问器的委托。只是典型的宏“魔法”。 -
这个词是“解构”——使用它应该可以帮助您找到好的文档,例如clojure.org/guides/destructuring
-
...坦率地说,我认为描述解构的工作原理一般(我是这么读的)范围太广,不能成为一个好的 StackOverflow 问题——如果您查看上面链接的解构页面,则内容比答案所能合理涵盖的要多得多!
标签: clojure