我在Clojure函数签名中看到了这样的&用法(http://clojure.github.io/core.async/#clojure.core.async/thread):

(thread & body)

而这个:
(doseq seq-exprs & body)

这是否意味着函数/宏可以接受列表作为变量我还发现*通常用于表示可以接受多个参数,例如:
(do exprs*)

有人知道函数/宏签名中&*之间的区别吗?有什么文档可以解释这种语法吗?

最佳答案

在clojurebinding formsletfnloop及其后代)中,可以将绑定向量的其余部分绑定到带有尾随&的序列例如,

(let [[a b & xs] (range 5)] xs) ;(2 3 4)

使用*和其他使用&是记录参数列表结构的约定。

09-11 19:23