Что означает двойная обратная косая черта в параметре функции в Elixir?

Недавно я натолкнулся на фрагмент кода, например:

def loop(ring_pid \\ self, nil, true) do
  #some code 
end

Что означает двойная обратная косая черта? Я googled вокруг и нашел http://elixir-lang.org/getting-started/sigils.html, но это относится к регулярным выражениям, а не к параметрам функции.

Ответы

Ответ 1

Указывает значение по умолчанию.

Аргументы функции, определенные с помощью \\ после имени аргумента, предоставляют необязательный параметр по умолчанию. Поэтому, если вызывается loop/2, первым аргументом будет pid, возвращаемый из self(). Если вызывается loop/3, вы должны указать pid.

Возьмем другой (тривиальный) пример:

math.ex

defmodule Math do   
  def add(a \\ 2, b) do
    a + b   
  end 
end

iex (1)> c("math.ex")

iex (2)> Math.add(1, 8) # add/2, because you are matching 1 to `a`.
9

iex (3)> Math.add(8) # add/1, because `a` is by default matched to 2.
10

Ответ 2

\\ используется для определения параметров по умолчанию, source

Это поведение можно увидеть, попробовав его в консоли iex, например:

defmodule Foo do
  def bar(x \\ 1, y) do
    x * y
  end
end

Foo.bar(2,3) # => 6
Foo.bar(3) # => 3