Elixir語言中 Kernel.def
相關用法介紹如下。
用法:
def(call, expr \\ nil)
(宏)
定義具有給定名稱和主體的公共函數。
例子
defmodule Foo do
def bar, do: :baz
end
Foo.bar()
#=> :baz
需要參數的函數可以定義如下:
defmodule Foo do
def sum(a, b) do
a + b
end
end
在上麵的例子中,定義了一個sum/2
函數;這個函數接收兩個參數並返回它們的總和。
默認參數
\\
用於指定函數參數的默認值。例如:
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
編譯器將此轉換為具有不同參數的多個函數,此處為 MyMath.multiply_by/1
和 MyMath.multiply_by/2
,它們表示傳遞或不傳遞具有默認值的參數的參數的情況。
在使用默認參數以及多個顯式聲明的子句定義函數時,您必須編寫一個聲明默認值的函數頭。例如:
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
請注意,\\
不能與匿名函數一起使用,因為它們隻能具有唯一的元數。
具有默認參數的關鍵字列表
包含許多參數的函數可以受益於使用
列表將屬性分組並作為單個值傳遞。Keyword
defmodule MyConfiguration do
@default_opts [storage: "local"]
def configure(resource, opts \\ []) do
opts = Keyword.merge(@default_opts, opts)
storage = opts[:storage]
# ...
end
end
使用
和 Map
存儲許多參數之間的區別是 Keyword
的鍵:Keyword
- 必須是原子
- 可以多次給予
- 按照開發商的規定排序
函數和變量名
函數和變量名稱具有以下語法:lowercase ASCII letter
或 underscore
後跟任意數量的 lowercase or uppercase ASCII letters
、 numbers
或 underscores
。或者,它們可以以 exclamation mark
或 question mark
結尾。
對於變量,任何以下劃線開頭的標識符都應指示未使用的變量。例如:
def foo(bar) do
[]
end
#=> warning: variable bar is unused
def foo(_bar) do
[]
end
#=> no warning
def foo(_bar) do
_bar
end
#=> warning: the underscored variable "_bar" is used after being set
rescue
/catch
/after
/else
函數體支持 rescue
、 catch
、 after
和 else
,就像
一樣(稱為 "implicit try")。例如,以下兩個函數是等價的:Kernel.SpecialForms.try/1
def convert(number) do
try do
String.to_integer(number)
rescue
e in ArgumentError -> {:error, e.message}
end
end
def convert(number) do
String.to_integer(number)
rescue
e in ArgumentError -> {:error, e.message}
end
相關用法
- Elixir Kernel.defexception用法及代碼示例
- Elixir Kernel.defmodule用法及代碼示例
- Elixir Kernel.defmacro用法及代碼示例
- Elixir Kernel.defdelegate用法及代碼示例
- Elixir Kernel.defguard用法及代碼示例
- Elixir Kernel.defoverridable用法及代碼示例
- Elixir Kernel.defstruct用法及代碼示例
- Elixir Kernel.defp用法及代碼示例
- Elixir Kernel.destructure用法及代碼示例
- Elixir Kernel.div用法及代碼示例
- Elixir Kernel.SpecialForms.case用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
- Elixir Kernel.tl用法及代碼示例
- Elixir Kernel.left - right用法及代碼示例
- Elixir Kernel.tuple_size用法及代碼示例
- Elixir Kernel.to_charlist用法及代碼示例
- Elixir Kernel.base ** exponent用法及代碼示例
- Elixir Kernel.left !== right用法及代碼示例
- Elixir Kernel.if用法及代碼示例
- Elixir Kernel.spawn_monitor用法及代碼示例
- Elixir Kernel.to_string用法及代碼示例
- Elixir Kernel.length用法及代碼示例
- Elixir Kernel.first..last用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.def(call, expr \\ nil)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。