Macros 在ClojureScript中的另一个宏中的宏中定义的访问值

Macros 在ClojureScript中的另一个宏中的宏中定义的访问值,macros,clojurescript,resolve,Macros,Clojurescript,Resolve,假设以下代码 (defmacro sdef [sname] `(def ~sname 3)) (defmacro sinc [sname] (inc ... we want to access sname's value here...)) 在ClojureScript中,我们会这样使用它 (sdef sfoo) (sinc sfoo) ; => 4 在我们的例子中,必须在编译时计算sinc 我们在Clojure中使用了resolve,这在ClojureScript中不起作用

假设以下代码

(defmacro sdef [sname]
  `(def ~sname 3))

(defmacro sinc [sname]
  (inc ... we want to access sname's value here...))
在ClojureScript中,我们会这样使用它

(sdef sfoo)
(sinc sfoo) ; => 4
在我们的例子中,必须在编译时计算
sinc

我们在Clojure中使用了
resolve
,这在ClojureScript中不起作用。我们知道,尤其是在ClojureScript中,宏计算与ClojureScript代码执行严格分离。
但是,有没有办法实现上述功能?

是否要求在编译时完成所有操作,而不必求助于以下内容?(defmacro-sinc[sname]`(inc~sname))你必须添加更多的上下文来解释你为什么要寻找这样一个奇怪的东西。如果必须的话,你可以对代码进行预处理。是的,它必须在编译时完成。我们正在定义自己的数据结构,并在def中绑定结构信息(参见sdef)。当在另一个宏(参见sinc)中使用时,这些数据结构的形状将在编译时进行检查。为此,我们需要更早地绑定结构信息。这在Clojure中非常有效,但是,我们希望它也能与ClojureScript一起使用。不管您是否找到了解决方案,您似乎都希望将const meta添加到sdef生成的def中。(在ClojureScript中,语义特别符合这一点。)我这样说是因为,默认情况下,变量没有与它们的值的编译时链接。是否要求所有这些都在编译时完成,而不诉诸以下内容?(defmacro-sinc[sname]`(inc~sname))你必须添加更多的上下文来解释你为什么要寻找这样一个奇怪的东西。如果必须的话,你可以对代码进行预处理。是的,它必须在编译时完成。我们正在定义自己的数据结构,并在def中绑定结构信息(参见sdef)。当在另一个宏(参见sinc)中使用时,这些数据结构的形状将在编译时进行检查。为此,我们需要更早地绑定结构信息。这在Clojure中非常有效,但是,我们希望它也能与ClojureScript一起使用。不管您是否找到了解决方案,您似乎都希望将const meta添加到sdef生成的def中。(在ClojureScript中,语义特别符合这一点。)我这样说是因为,默认情况下,变量没有编译时链接到它们的值。