0

为什么我们可以写

 (defn factory-foo [] (fn [] (println "foo")))
 (apply (factory-foo) [])

但不是:

 (defn factory-bar [] #((println "bar")))
 (apply (factory-bar ) []) ;throws NPE

这是一个错误吗?

4

1 回答 1

7

#((println "bar))由读者翻译为(fn [] ((println "bar")))- 注意额外的括号。(println "bar")这里 printsbar并返回nil,然后nil由于外括号而将其本身作为函数调用。nil实际上null是,并且试图取消对 NPE 的引用。

#(..)为了避免这种情况,只需在:中放置额外的括号#(println "bar")

于 2012-07-26T11:31:04.493 回答