2015-09-15 2 views

ответ

2

Поскольку первое выражение может быть Unquote внутри цитаты:

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

Это создаст цитируемое выражение, которое вызывает hello(1, 2, 3). Вот почему мы поддерживаем только два уровня, потому что это все, что нам нужно. Мы могли бы поддержать его n-уровнями, хотя, если мы хотим этого в будущем.

+0

Так что это на самом деле полезно только при использовании с 'unquote', правильно? Имеет ли смысл генерировать ошибку или предупреждение, если используется с чем-то еще, чем 'unquote'? –

+0

Мы уже ошибаемся, если вы используете его с чем-то другим, кроме unquote. –

+0

Я имею в виду 'quote do: f (: bla)()' можно было бы скорректировать, чтобы привести к ошибке, но 'quote do: unquote (: bla)()' конечно нет. Или я не понимаю это правильно? –