Han*_*Sun 3 lisp macros clojure
我在这里看到了&Clojure函数签名的用法(http://clojure.github.io/core.async/#clojure.core.async/thread):
(thread & body)
Run Code Online (Sandbox Code Playgroud)
还有这个:
(doseq seq-exprs & body)
Run Code Online (Sandbox Code Playgroud)
这是否意味着函数/宏可以接受列表作为变量?我也发现*经常用来表示可以接受多个参数,如下所示:
(do exprs*)
Run Code Online (Sandbox Code Playgroud)
有没有人有之间的差异的想法&,并*在功能/宏特征?有没有文档可以解释这种语法?
Clojure中结合形式(let,fn,loop,和它们的后代),可以结合矢量的其余部分结合于具有拖曳的序列&.例如,
(let [[a b & xs] (range 5)] xs) ;(2 3 4)
Run Code Online (Sandbox Code Playgroud)
使用*和其他用途&是用于记录参数列表结构的约定.
这意味着&符号后面可以有多个参数,它们将被函数看作seq.例:
(defn g [a & b]
(println a b))
Run Code Online (Sandbox Code Playgroud)
如果你打电话:
(g 1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
它会打印出来1 (2 3 4)(a是1,b是包含2,3和4的序列).