クロージャーを使用する関数は、 で使用すると壊れるように見え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
関数オブジェクトを処理する方法について具体的に話しています。私の知る限りeval
、実際には関数を含むJavaオブジェクトで動作するように設計されています。clojure の Web サイトにある例で(eval (list + 1 2 3))
は、関数オブジェクトを に渡しますeval
。