В Clojure,
(def x 3)
(eval '(prn x))
печатает 3, тогда как
(let [y 3]
(eval '(prn y)))
и
(binding [z 3] (eval '(prn z)))
сгенерировать исключение "Невозможно разрешить var".
В соответствии с http://clojure.org/evaluation, eval
, load-string
и т.д. генерируют временные пространства имен для оценки их содержимого. Поэтому я ожидал бы, что ни один из приведенных выше образцов кода не будет работать, поскольку (def x 3)
выполняется в моем текущем пространстве имен, а не в файле, созданном eval
.
- Почему первый пример кода работает, а не последние два?
- Как я могу
eval
создать форму со связанными переменными без использованияdef
?
Спасибо!