Clojureでは、
(def x 3)
(eval '(prn x))
3を印刷しますが、
(let [y 3]
(eval '(prn y)))
と
(binding [z 3] (eval '(prn z)))
'変数を解決できません'例外を生成します。
http://clojure.org/evaluationによるとeval
、、、load-string
などは、その内容を評価するための一時的な名前空間を生成します。したがって、上記のコードサンプルはどちらも機能しないと思い(def x 3)
ます。これは、によって作成された名前空間ではなく、現在の名前空間で行われるためeval
です。
- 最初のコードサンプルが機能し、最後の2つが機能しないのはなぜですか?
eval
使用せずに変数がバインドされたフォームを使用するにはどうすればよいdef
ですか?
ありがとう!