Clojure 两个函数的参数有什么区别?

Clojure 两个函数的参数有什么区别?,clojure,Clojure,我想知道以下两个函数的参数向量有什么区别(如果有的话)。我相信凭直觉我能理解发生了什么,但第一件事让我措手不及。多谢各位 从堆栈溢出 foo可以使用一个或两个参数,其中strip csv header只能使用一个参数 (defn foo ([x] (foo x [])) ; one arg path ([x current] ; two args path (if (= x 0) (apply vector (sort < current))

我想知道以下两个函数的参数向量有什么区别(如果有的话)。我相信凭直觉我能理解发生了什么,但第一件事让我措手不及。多谢各位

从堆栈溢出

foo可以使用一个或两个参数,其中strip csv header只能使用一个参数

(defn foo
  ([x] (foo x [])) ; one arg path

  ([x current]     ; two args path
     (if (= x 0)
       (apply vector (sort < current))
       (recur (dec x) (conj current x)))))
foo可以使用一个或两个参数,其中strip csv header只能使用一个参数

(defn foo
  ([x] (foo x [])) ; one arg path

  ([x current]     ; two args path
     (if (= x 0)
       (apply vector (sort < current))
       (recur (dec x) (conj current x)))))

只是对Jani Hartikainen回答的补充:

第三类函数参数是变量arity函数:

(def bar [ &any-number-of-args ] (map baz any-number-of-args))

这并不是原始问题的一部分,只是为了完整性的说明。

只是对Jani Hartikainen答案的补充:

第三类函数参数是变量arity函数:

(def bar [ &any-number-of-args ] (map baz any-number-of-args))

这并不是原始问题的一部分,只是为了完整起见,请注意。

谢谢您的回答。这是一个变量参数签名吗?是的,你可以有一些函数,它们可以像这样被参数数的算术重载。谢谢你的回答。所以这是一个变量参数签名?是的,你可以有一些函数,它们可以像这样被参数数的算术重载。