解析宏中的符号

Erw*_*ers 5 clojure

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

(ns my-namespace)

(def my-definition "HELLO")
(def my-definition2 "HI")
Run Code Online (Sandbox Code Playgroud)

现在,我想my-namespace在宏中使用vars的值,但我想动态检索符号.例如,

(defmacro my-macro [n]
  (-> "my-namespace/my-definition" symbol resolve var-get))
Run Code Online (Sandbox Code Playgroud)

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

在宏中,符号无法解析.我试过引用和取消引用,但它仍然无法正常工作.

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

Ole*_*Cat 2

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

(require 'my-namespace)
Run Code Online (Sandbox Code Playgroud)

或者在命名空间声明中:

(ns macro-expansion-ns
  (:require [my-namespace]))
Run Code Online (Sandbox Code Playgroud)