解析宏中的符号

时间:2016-11-18 15:02:48

标签: clojure

我被困在一个看似基本的东西上。我有一个命名空间,我有一些定义:

(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))

以这种方式检索符号在函数中工作(只要加载了命名空间),但不在宏中。

在宏中,无法解析符号。我试过引用和取消引用,但它仍然不起作用。

在宏中是否可以使用像这样创建的符号的值?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:3)

试试这个:

(defmacro my-macro
  [str]
  (-> str symbol resolve deref))

答案 1 :(得分:2)

无法解析符号,因为未加载定义它的命名空间。您可以通过

加载命名空间
(require 'my-namespace)

或在名称空间声明中:

(ns macro-expansion-ns
  (:require [my-namespace]))