对不起,如果这已经被问到了。在论坛中搜索var!
给了我所有带有 word 的帖子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 ) 以及许多其他内容。似乎它应该工作,但我只是不知道为什么它不会..