我被困在一个看似基本的东西上.我有一个命名空间,我有一些定义:
(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)
以这种方式检索符号在函数中工作(只要加载了命名空间),但不在宏中.
在宏中,符号无法解析.我试过引用和取消引用,但它仍然无法正常工作.
在宏中是否可以使用像这样创建的符号的值?如果是这样,怎么样?
无法解析该符号,因为未加载定义该符号的命名空间。您可以通过以下方式加载命名空间
(require 'my-namespace)
Run Code Online (Sandbox Code Playgroud)
或者在命名空间声明中:
(ns macro-expansion-ns
(:require [my-namespace]))
Run Code Online (Sandbox Code Playgroud)