Я пытаюсь определить функцию, в которой я указываю часть списка ключевых слов, а затем сопоставляю оставшиеся параметры как хвост.
def my_func(foo: 22, bar: 42 | baz) do
IO.inspect(baz)
end
my_func(foo: 22, bar: 42, another_arg: 11, even_more_args: 12)
и идея состоит в том, чтобы baz
был списком ключевых слов, содержащим [another_arg: 11, even_more_args: 12]
Это не компилируется, выдавая следующую ошибку:
неуместный оператор |/2
| оператор обычно используется между скобками как оператор минус:
[голова | хвост]
Однако я могу сопоставить список ключевых слов с образцом, используя следующее:
def my_func([{:foo, 22}, {:bar, 42} | baz]) do
end
Поскольку ключевые слова являются семантическим сахаром для списков кортежей, мне непонятно, почему работает последний синтаксис, а не первый. Есть ли какой-то синтаксис, которого мне не хватает, чтобы использовать |
с ключевыми словами?