4 ms·
CL-USER> (progn (defmacro foo () `(let ((bar 1)) bar)) (foo)) 1 user=> (do (defmacro foo [] `(let [bar 1] bar)) (foo)) java.lang.Exception: Can't let qua
by lg 17y ago
CL-USER> (progn (defmacro foo () `(let ((bar 1)) bar)) (foo))
1
user=> (do (defmacro foo [] `(let [bar 1] bar)) (foo))
java.lang.Exception: Can't let qualified name: clojure.core/bar
EDIT: sorry if that was cryptic, see Lisp will let you say
(let ((cl-user::bar 1)) cl-user::bar)
but clojure won't let you do
(let [clojure.core/bar 1] clojure.core/bar)
You can't use fully-qualified names that way. So namespace resolution in expansions prevents capture. If you really want capture, you can do ~'bar to protect it from resolution. Well I hope that's still true, lotrepls doesn't seem to like it :(