iex(1)> quote do: f()()
{{:f, [], []}, [], []}
虽然
f()()()
不是:iex(2)> quote do: f()()()
** (SyntaxError) iex:2: syntax error before: '('
这很奇怪,因为
f()()
无法编译。 最佳答案
因为第一个表达式可以是引号内的取消引号:
fun = :hello
quote do
unquote(fun)(1, 2, 3)
end
这将生成一个调用
hello(1, 2, 3)
的带引号的表达式。这就是为什么我们只支持两个级别,因为这就是我们所需要的。如果我们将来想要它,我们可以让它支持 n 级。关于elixir - 为什么 `f()()` 是引用中的有效形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32578471/