此功能
(defn sum [& args] (apply + args))
应该总结所有args序列元素抛出异常。 为什么呢?
user> (defn sum [& args] (apply + args))
#'user/sum
user> (sum [1 2 3])
ClassCastException java.lang.Class.cast (Class.java:2999)
user> (sum (range 1 10))
ClassCastException java.lang.Class.cast (Class.java:2999)
(在这个问题How to make a Clojure function take a variable number of parameters?)
中也用作示例(不能为我编译)我在Emacs 24.2 Live with Clojure 1.5.1中使用nrepl
答案 0 :(得分:3)
当您使用& args
指定函数参数时,这意味着args
将包含所有其他函数参数的列表。在这种情况下,sum
正在获取其所有参数的列表 - 但其参数已经一个列表,所以sum
在这里有效的是
(apply + [[1 2 3]])
如果你摆脱了&
参数定义中的sum
(这样列表只是[args]
),你就会得到你想要的东西。
答案 1 :(得分:0)
尝试以下方法。在Clojure中,变量参数是列表本身
(sum 1 2 3)