我正在编写一个Julia宏,用于接收表达式并将其序列化,以便在其他地方运行。因此,该宏会接收表达式并替换所有符号为变量。然后将表达式序列化并在其他地方进行评估。
我的问题与评估不在全局范围内的变量有关。也就是说,以下内容可以正常工作,因为a在全局范围内定义:
我的问题与评估不在全局范围内的变量有关。也就是说,以下内容可以正常工作,因为a在全局范围内定义:
macro myprintf(ex)
print(eval(ex))
end
# works
a = 2
@myprintf a
当宏在新会话中运行时,由于它无法看到局部循环作用域中定义的a
,因此会引发错误:
macro myprintf(ex)
print(eval(ex))
end
# UndefVarError: a not defined
for j=1:3
a = 2
@myprintf a
end
如果a
在局部作用域中定义,比如在循环中,有没有办法在宏内部访问它?我知道我可能没有按照宏的意图使用它,因为我在宏定义内部调用了eval
。 总体思路是,我想序列化传递给宏的表达式,并在以后的某个地方(例如不同的Julia会话)中评估它。