为什么 `f()()` 是引用中的有效形式?
Why is `f()()` a valid form in quote?
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 级。
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 级。