Макросы получают свои аргументы, цитируемых выражений, и в эликсира, кортежи длины 2 представлены как сами по себе, а остальные представлены в виде {:{}, _, [value1, value2, ...]}
:
iex(1)> Macro.escape {}
{:{}, [], []}
iex(2)> Macro.escape {1}
{:{}, [], [1]}
iex(3)> Macro.escape {1, 2}
{1, 2}
iex(4)> Macro.escape {1, 2, 3}
{:{}, [], [1, 2, 3]}
iex(5)> Macro.escape {1, 2, 3, 4}
{:{}, [], [1, 2, 3, 4]}
Если вводить эти значения s в quote
с использованием unquote
, они автоматически преобразуются в фактические кортежи. Мы можем видеть, что с помощью Macro.to_string/2
:
iex(6)> Macro.to_string {:{}, [], [1, 2, 3]}
"{1, 2, 3}"
Вы можете найти более подробную информацию об этом в Quote and unquote -> Escaping Руководство по началу работы.