为什么`f()()`是引用中的有效形式?

时间:2015-09-15 05:39:38

标签: elixir

iex(1)> quote do: f()()
{{:f, [], []}, [], []}

虽然f()()()不是:

iex(2)> quote do: f()()()
** (SyntaxError) iex:2: syntax error before: '('

这很奇怪,因为f()()无法编译。

1 个答案:

答案 0 :(得分:2)

因为第一个表达式可以是引号中的unquote:

fun = :hello
quote do
  unquote(fun)(1, 2, 3)
end

这将生成一个调用hello(1, 2, 3)的带引号的表达式。这就是为什么我们只支持两个级别,因为这就是我们所需要的。如果我们将来想要它,我们可以支持n级。