【发布时间】:2016-11-18 15:02:47
【问题描述】:
我被一个看似基本的东西困住了。我有一个命名空间,其中有一些定义:
(ns my-namespace)
(def my-definition "HELLO")
(def my-definition2 "HI")
现在,我想在宏中使用my-namespace 中的变量值,但我想动态检索符号。例如,
(defmacro my-macro [n]
(-> "my-namespace/my-definition" symbol resolve var-get))
以这种方式检索符号在函数中有效(只要命名空间被加载),但在宏中无效。
在宏中,无法解析符号。我已经尝试过引用和取消引用,但它仍然不起作用。
是否可以在宏中使用这样创建的符号的值?如果有,怎么做?
【问题讨论】:
-
my-namespace需要在my-macro展开之前加载。是这样吗? -
在宏命名空间声明中添加
(require [my-namespace :refer :all])解决了这个问题。如果您发布答案,您可以在@OlegTheCat 中获得一些分数,如果您对此感兴趣的话。
标签: clojure