iex(1)> quote do: f()()
{{:f, [], []}, [], []}
虽然f()()()
不是:
iex(2)> quote do: f()()()
** (SyntaxError) iex:2: syntax error before: '('
这很奇怪,因为f()()
无法编译。
答案 0 :(得分:2)
因为第一个表达式可以是引号中的unquote:
fun = :hello
quote do
unquote(fun)(1, 2, 3)
end
这将生成一个调用hello(1, 2, 3)
的带引号的表达式。这就是为什么我们只支持两个级别,因为这就是我们所需要的。如果我们将来想要它,我们可以支持n级。