Sta*_*lin 0 macros function clojure
为什么我们可以写
(defn factory-foo [] (fn [] (println "foo")))
(apply (factory-foo) [])
Run Code Online (Sandbox Code Playgroud)
但不是:
(defn factory-bar [] #((println "bar")))
(apply (factory-bar ) []) ;throws NPE
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
#((println "bar))由读者翻译(fn [] ((println "bar")))- 注意额外的括号.(println "bar")这里打印bar并返回nil,然后nil由于外括号而将其自身称为函数.nil是null在事实上,并试图取消对它的引用结果NPE.
为了避免这种情况,只需将额外的一对括号放入其中#(..):#(println "bar").