与闭包一起使用时,函数似乎会中断eval
。
(eval {:fn (let [x "foo"] (fn [] "x"))})
;=> {:fn #<user$eval14716$fn__14717 user$eval14716$fn__14717@1ddd735>}
(eval {:fn (let [x "foo"] (fn [] x))})
;=> IllegalArgumentException No matching ctor found for class user$eval14740$fn__14741
; clojure.lang.Reflector.invokeConstructor (Reflector.java:166)
我对 Clojure(或闭包)了解得不够多,不知道这是一个错误还是故意不允许的东西 - 任何人都可以对此有所了解吗?
编辑:为了清楚起见,我专门谈论eval
处理函数对象的方式。AFAIKeval
实际上是为处理 java 对象而设计的,包括函数;clojure 网站上给出的示例(eval (list + 1 2 3))
- 将函数对象传递到eval
.