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))
啊。。。有道理。非常感谢你。