在 let 中引用 clojure
clojure quoting inside let
引用(语法和非语法)似乎无法检测 let 语句中的变量:
(let [foo 1] (eval `(print foo)))
这将产生错误或使用绑定到 foo in (def foo bar) 的任何先前值绑定。有没有办法让语法引用使用 let 定义的 "local" 变量?
取消引用以替换值:
(let [foo 1] (eval `(print ~foo)))
...或显式绑定您的变量:
(declare :^dynamic foo)
(binding [foo 1] (eval '(print foo)))
详情见Variable scope + eval in Clojure。
凯文
你很接近,这应该可以完成工作(基本上,你应该在引用的语句中取消引用本地变量)
(let [foo 1] (eval `(print ~foo)))
此外,虽然 eval
确实是一个有效的语言函数,但总体目标是什么?可能还有更好的方法。
弗兰克
引用(语法和非语法)似乎无法检测 let 语句中的变量:
(let [foo 1] (eval `(print foo)))
这将产生错误或使用绑定到 foo in (def foo bar) 的任何先前值绑定。有没有办法让语法引用使用 let 定义的 "local" 变量?
取消引用以替换值:
(let [foo 1] (eval `(print ~foo)))
...或显式绑定您的变量:
(declare :^dynamic foo)
(binding [foo 1] (eval '(print foo)))
详情见Variable scope + eval in Clojure。
凯文
你很接近,这应该可以完成工作(基本上,你应该在引用的语句中取消引用本地变量)
(let [foo 1] (eval `(print ~foo)))
此外,虽然 eval
确实是一个有效的语言函数,但总体目标是什么?可能还有更好的方法。
弗兰克