Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 从let范围内执行的另一个宏中的一个宏访问本地宏_Macros_Clojure_Symbol Capture - Fatal编程技术网

Macros 从let范围内执行的另一个宏中的一个宏访问本地宏

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))) 注意:我

温柔点,因为我的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)))

虽然如果你不完全理解宏是危险的,但这是有效的。

你能提供一个不那么简单但更现实的例子吗?我发现很难说出你想做什么(甚至给出你自己的答案!)。只是想了解发生了什么,如果你想继续前进,不要担心。:-)是我想做的更好的例子。由于一个不相关的原因,它仍然不起作用。我认为你在这两个句子中都缺少了语法引号。(另见我对这个问题的评论)是的,我忘了加上这个。很抱歉