长生不老药中的双反斜杠是什么意思?
What does double backslash mean in elixir?
我在网上查了一下双反斜杠在 elixir 中的含义。我遇到了使用它的代码。但我仍然无法理解双反斜杠在长生不老药中的作用。示例代码如下。
defmodule Concat do
def join(a, b, sep \ " ") do
a <> sep <> b
end
end
IO.puts Concat.join("Hello", "world") #=> Hello world
IO.puts Concat.join("Hello", "world", "_") #=> Hello_world
简而言之 - 它表示参数的“默认值”。然而,由于 Erlang 的实现方式,实际上它意味着“创建新函数并省略此参数,该函数将使用给定值调用此函数来代替此参数”。因此您的示例将扩展为:
defmodule Concat do
def join(a, b), do: join(a, b, " ")
def join(a, b, sep), do: a <> sep <> b
end
这在documentation中有解释:
Default arguments
\
is used to specify a default value for a parameter of a function.
For example:
defmodule MyMath do
def multiply_by(number, factor \ 2) do
number * factor
end
end
MyMath.multiply_by(4, 3)
#=> 12
MyMath.multiply_by(4)
#=> 8
The compiler translates this into multiple functions with different
arities, here MyMath.multiply_by/1
and MyMath.multiply_by/2
, that
represent cases when arguments for parameters with default values are
passed or not passed.
When defining a function with default arguments as well as multiple
explicitly declared clauses, you must write a function head that
declares the defaults. For example:
defmodule MyString do
def join(string1, string2 \ nil, separator \ " ")
def join(string1, nil, _separator) do
string1
end
def join(string1, string2, separator) do
string1 <> separator <> string2
end
end
Note that \
can't be used with anonymous functions because they can
only have a sole arity.
我在网上查了一下双反斜杠在 elixir 中的含义。我遇到了使用它的代码。但我仍然无法理解双反斜杠在长生不老药中的作用。示例代码如下。
defmodule Concat do
def join(a, b, sep \ " ") do
a <> sep <> b
end
end
IO.puts Concat.join("Hello", "world") #=> Hello world
IO.puts Concat.join("Hello", "world", "_") #=> Hello_world
简而言之 - 它表示参数的“默认值”。然而,由于 Erlang 的实现方式,实际上它意味着“创建新函数并省略此参数,该函数将使用给定值调用此函数来代替此参数”。因此您的示例将扩展为:
defmodule Concat do
def join(a, b), do: join(a, b, " ")
def join(a, b, sep), do: a <> sep <> b
end
这在documentation中有解释:
Default arguments
\
is used to specify a default value for a parameter of a function. For example:defmodule MyMath do def multiply_by(number, factor \ 2) do number * factor end end MyMath.multiply_by(4, 3) #=> 12 MyMath.multiply_by(4) #=> 8
The compiler translates this into multiple functions with different arities, here
MyMath.multiply_by/1
andMyMath.multiply_by/2
, that represent cases when arguments for parameters with default values are passed or not passed.When defining a function with default arguments as well as multiple explicitly declared clauses, you must write a function head that declares the defaults. For example:
defmodule MyString do def join(string1, string2 \ nil, separator \ " ") def join(string1, nil, _separator) do string1 end def join(string1, string2, separator) do string1 <> separator <> string2 end end
Note that
\
can't be used with anonymous functions because they can only have a sole arity.