我被困在一个看似基本的东西上。我有一个命名空间,我有一些定义:
(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))
以这种方式检索符号在函数中工作(只要加载了命名空间),但不在宏中。
在宏中,无法解析符号。我试过引用和取消引用,但它仍然不起作用。
在宏中是否可以使用像这样创建的符号的值?如果是这样,怎么样?
答案 0 :(得分:3)
试试这个:
(defmacro my-macro
[str]
(-> str symbol resolve deref))
答案 1 :(得分:2)
无法解析符号,因为未加载定义它的命名空间。您可以通过
加载命名空间(require 'my-namespace)
或在名称空间声明中:
(ns macro-expansion-ns
(:require [my-namespace]))