Как стать автором
Обновить

Комментарии 9

Я как ни открою пост про эликсир, так увижу новый синтаксис в языке.

def changeset(user, params \\ :empty) do


что значат два бекслеша? Это уже не говоря о том, что тут какое-то изменение работы с функцией, которое понятно только тем, кто с этим уже работал.
параметр по умолчанию
Это уже не говоря о том, что тут какое-то изменение работы с функцией, которое понятно только тем, кто с этим уже работал.

Что изменилось можно понять по сигнатуре прошлой версии, которая представлена в тексте повыше:

  cast(source, :empty, required, optional)


То есть ранее 3-ий и 4-ый аргументы принимали required и optional поля соответственно, а теперь мы передаем все поля в 3-ий аргумент, а помечаем их required в validate_required.

С Ecto ранее не работал.

Для справедливости замечу, что это совсем не новый синтаксис.
Синтаксис \\ для default arguments появился в 0.12.3(февраль 2014), а сами аргументы по умолчанию были уже в первом публичном релизе 0.5.0(май 2012).

это каждый раз для меня открытие =)

Вот так фигак, и оказывается, что функция может иметь плавающее количество аргументов.

Это не совсем плавающее число аргументов, функция f(a, b, c \\ 0) все равно остается f/3, это просто сахар.


Но при этом


defmodule A do
  def test(a, b) do
    a + b
  end

  def test(a, b, c \\ 0) do
    a + b + c
  end
end

warning: this clause cannot match because a previous clause at line 2 always matches
  /home/kana/dev/check_arity.ex:6
я к тому, что это создаст две функции, причем одну из них скрыто.

Больше одного аргумента с дефолтными параметрами может быть?

Может, но что именно сгенерит компилятор я так сходу не скажу.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации