Я новичок в Elixir. У меня есть этот код:Соответствие шаблону и параметры по умолчанию
defmodule DefaultParams do
def func(p1, p2 \\ 2, p3 \\ 3, p4) do
IO.inspect [p1, p2, p3, p4]
end
end
С помощью этого кода я:
DefaultParams.func("a", "b") #=> ("a", 2, 3, "b")
Я понимаю, почему он работает именно так: из-за сравнения с шаблоном. Эликсир пытается сопоставить поставленные параметры с теми, которые определены в определении функции.
Однако, я не понимаю этого:
DefaultParams.func("a", "b", "c") #=> ("a", "b", 3, "c")
Почему выход не ("a", 2, "b", "c")
? Это также соответствует шаблону, определенному в параметрах. Я искал подробное объяснение в документах, но ничего не мог найти.
Подумав некоторое время, я разработал подозрение, что он работает так:
- «а» согласована с p1
- «б» сравнивается с p2
- «с "не соответствует p3, потому что тогда будет несоответствие. Так он пропускается, и p3 получает значение по умолчанию, которое 3
- «с» согласована с p4
Может кто-нибудь подтвердить/объяснить?
редактирование: фиксированный опечаток
Ах, очень осветительными. Спасибо! –