Dav*_*ams -2 clojure variadic-functions
我有两个可变参数函数。其中一个将其参数传递给另一个。问题是可变参数在第二次调用时变成了一个列表。我如何保持它们的可变参数?
=> (defn foo [x & ys] (println x ys))
=> (defn bar [x & ys] (foo (clojure.string/upper-case x) ys))
=> (foo "hi")  
hi nil
=> (bar "hi")
HI (nil)
在实际函数中,foo 将其 args 传递给可变参数 java 函数,因此 varargs 确实需要保留 varargs。我该怎么做呢?
来自http://clojuredocs.org/clojure_core/clojure.core/apply
;您也可以将操作数放在操作数列表之前,它们将在操作数列表中使用 (apply + 1 2 '(3 4)) ; 等于 (apply + '(1 2 3 4)) => 10
所以
(defn bar [x & ys] (apply foo (clojure.string/upper-case x) ys))
应该管用。对于 Java varargs 的问题,请注意 noisesmith 的评论。