【发布时间】:2012-03-05 10:26:59
【问题描述】:
正如你们中的一些人所知,我正在 Clojure 中实现 Shen。 由于 Shen 有一个双重命名空间并且所有符号都对自己求值,因此我需要一个 Clojure 宏,它将符号绑定到自身,并将值绑定到后缀符号。
现在还必须绑定 *language* 等符号。但是当我使用带有*language* 作为参数的以下宏时,我得到Warning: *language* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. Please either indicate ^:dynamic *language* or change the name.
(defmacro set [x y]
`(let [y# ~y]
(def ^:dynamic ~x '~x)
(intern *ns* (symbol (str (name ~x) "__varPoF__")))
(def ^:dynamic ~(symbol (str (name x) "__varPoF__")) y#)
y#))
谁能告诉我为什么这不起作用?
【问题讨论】: