【发布时间】:2021-09-20 17:10:07
【问题描述】:
对不起,如果这已经被问到了。在论坛中搜索 var! 会得到所有带有单词 var 的帖子。很难缩小范围。
正在努力编写一个宏,该宏从调用者的上下文中读取变量并从函数中返回它。这是我能想到的最简单的问题形式:
defmodule MyUnhygienicMacros do
defmacro create_get_function do
quote do
def get_my_var do
var!(my_var)
end
end
end
end
defmodule Caller do
require MyUnhygienicMacros
my_var = "happy"
MyUnhygienicMacros.create_get_function()
end
目标是在我运行 iex 会话时看到这一点:
$ Caller.get_my_var()
"happy"
但这不会编译。来电者的my_var 也未使用。
编译错误expected "my_var" to expand to an existing variable or be part of a match.
我已经阅读了 McCord 的元编程书籍、这篇博文 (https://www.theerlangelist.com/article/macros_6) 以及许多其他内容。似乎它应该可以工作,但我就是不知道为什么它不会..
【问题讨论】:
标签: elixir metaprogramming hygiene