def hello / 1 конфликтует со значениями по умолчанию от hello / 2
Это означает, что компилятор не знает, означает ли hello("foo")
:
- Вызовите
hello/1
с "foo"
в качестве аргумента. - Вызовите
hello/2
с "foo"
в качестве первого аргумента и вторым аргументом по умолчанию.
Не знаетэто потому, что оба имеют одинаковый синтаксис вызова, но предложения могут быть реализованы по-разному.
Сначала можно объявить сигнатуру функции со значением по умолчанию, а затем определить реализации, которые используют это значение по умолчанию.Я думаю, что лучше всего иметь одно определение конечного результата, которое возвращает "Hello #{name}"
, и включить это поведение в другое предложение функции:
def hello(user, opts \\ [])
def hello(%User{name: name}, opts), do: hello(name, opts)
def hello(name, _opts), do: "Hello #{name}"