В 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
.
оценить
форму со связанными переменными без использования def
? Спасибо!