Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure rest参数引发NullPointerException的匿名函数_Clojure - Fatal编程技术网

Clojure rest参数引发NullPointerException的匿名函数

Clojure rest参数引发NullPointerException的匿名函数,clojure,Clojure,下面是函数 (#( (println (str "first: " %1)) (println (str "second: " %2)) (println (str "rest: " (clojure.string/join ", " %&)))) "f" "s" "x" "y" "z") 当在苹果酒中运行时,我得到了想要的结果,但最后我发现我也得到了一个NullPointerException 这种形式的匿名函数似乎在解构方面存在一些问题 因为,当我尝试以下形式的

下面是函数

(#(
   (println (str "first: " %1))
   (println (str "second: " %2))
   (println (str "rest: " (clojure.string/join ", " %&))))
 "f" "s" "x" "y" "z")
当在苹果酒中运行时,我得到了想要的结果,但最后我发现我也得到了一个NullPointerException

这种形式的匿名函数似乎在解构方面存在一些问题

因为,当我尝试以下形式的匿名函数时,它是有效的

((fn [f s & rest]
    (println (str "first: " f))
    (println (str "second: " s))
    (println (str (clojure.string/join ", " rest))))
   "f" "s" "x" "y" "z")

有人能解释一下为什么会这样吗?

你需要一个
do

(#(do
   (println (str "first: " %1))
   (println (str "second: " %2))
   (println (str "rest: " (clojure.string/join ", " %&))))
 "f" "s" "x" "y" "z")
如果没有
do
,您将尝试调用列表其余元素上第一个
println
(即
nil
)的结果
fn
有一个隐式的
do


对于最小的情况,比较
((println))
(do(println))

啊。。。有道理。非常感谢你。