Macros 从let范围内执行的另一个宏中的一个宏访问本地宏
温柔点,因为我的macrofoo很弱 我想做的是这样的:Macros 从let范围内执行的另一个宏中的一个宏访问本地宏,macros,clojure,symbol-capture,Macros,Clojure,Symbol Capture,温柔点,因为我的macrofoo很弱 我想做的是这样的: (defmacro foo [x] `(dosync (alter x# conj x))) (defmacro bar [] `(let [x# (ref [])] (foo 3))) 这可能吗?我不能仅仅因为符号捕获而(让[x..) (defmacro foo [x] `(dosync (alter ~'x conj x))) (defmacro bar [] `(let [~'x (ref [])] (foo 3))) 注意:我
(defmacro foo [x] `(dosync (alter x# conj x)))
(defmacro bar [] `(let [x# (ref [])] (foo 3)))
这可能吗?我不能仅仅因为符号捕获而(让[x..)
(defmacro foo [x] `(dosync (alter ~'x conj x)))
(defmacro bar [] `(let [~'x (ref [])] (foo 3)))
注意:我知道这个例子很琐碎,不值得使用宏,但它是我能想到的最简单的例子。我需要强制捕获符号
(defmacro foo [x] `(dosync (alter ~'x conj x)))
(defmacro bar [] `(let [~'x (ref [])] (foo 3)))
虽然如果你不完全理解宏是危险的,但这是有效的。你能提供一个不那么简单但更现实的例子吗?我发现很难说出你想做什么(甚至给出你自己的答案!)。只是想了解发生了什么,如果你想继续前进,不要担心。:-)是我想做的更好的例子。由于一个不相关的原因,它仍然不起作用。我认为你在这两个句子中都缺少了语法引号。(另见我对这个问题的评论)是的,我忘了加上这个。很抱歉