Elixir語言中 Kernel.SpecialForms.case
相關用法介紹如下。
用法:
case(condition, clauses)
(宏)
將給定的表達式與給定的子句匹配。
例子
case File.read(file) do
{:ok, contents} when is_binary(contents) ->
String.split(contents, "\n")
{:error, _reason} ->
Logger.warning "could not find #{file}, assuming empty..."
[]
end
在上麵的示例中,我們將
的結果與每個子句 "head" 進行匹配,並執行與匹配的第一個子句相對應的子句 "body"。File.read/1
如果沒有子句匹配,則會引發錯誤。出於這個原因,可能需要添加一個始終匹配的最終 catch-all 子句(如 _
)。
x = 10
case x do
0 ->
"This clause won't match"
_ ->
"This clause would match any value (x = #{x})"
end
#=> "This clause would match any value (x = 10)"
變量處理
請注意,綁定在子句中的變量不會泄漏到外部上下文:
case data do
{:ok, value} -> value
:error -> nil
end
value
#=> unbound variable value
外部上下文中的變量也不能被覆蓋:
value = 7
case lucky? do
false -> value = 13
true -> true
end
value
#=> 7
在上麵的示例中,無論 lucky?
的值如何,value
都將是 7
。子句中綁定的變量value
和外部上下文中綁定的變量value
是兩個完全獨立的變量。
如果要對現有變量進行模式匹配,則需要使用
運算符:^/1
x = 1
case 10 do
^x -> "Won't match"
_ -> "Will match"
end
#=> "Will match"
使用警衛匹配多個值
雖然不可能在單個子句中匹配多個模式,但可以通過使用守衛匹配多個值:
case data do
value when value in [:one, :two] ->
"#{value} has been matched"
:three ->
"three has been matched"
end
相關用法
- Elixir Kernel.SpecialForms.cond用法及代碼示例
- Elixir Kernel.SpecialForms.%{}用法及代碼示例
- Elixir Kernel.SpecialForms.for用法及代碼示例
- Elixir Kernel.SpecialForms.quote用法及代碼示例
- Elixir Kernel.SpecialForms.require用法及代碼示例
- Elixir Kernel.SpecialForms.&expr用法及代碼示例
- Elixir Kernel.SpecialForms.<<args>>用法及代碼示例
- Elixir Kernel.SpecialForms.{args}用法及代碼示例
- Elixir Kernel.SpecialForms.unquote_splicing用法及代碼示例
- Elixir Kernel.SpecialForms.receive用法及代碼示例
- Elixir Kernel.SpecialForms.%struct{}用法及代碼示例
- Elixir Kernel.SpecialForms.import用法及代碼示例
- Elixir Kernel.SpecialForms.left . right用法及代碼示例
- Elixir Kernel.SpecialForms.alias用法及代碼示例
- Elixir Kernel.SpecialForms.try用法及代碼示例
- Elixir Kernel.SpecialForms.fn用法及代碼示例
- Elixir Kernel.SpecialForms.__aliases__用法及代碼示例
- Elixir Kernel.SpecialForms.left :: right用法及代碼示例
- Elixir Kernel.SpecialForms.unquote用法及代碼示例
- Elixir Kernel.SpecialForms.with用法及代碼示例
- Elixir Kernel.SpecialForms.__block__用法及代碼示例
- Elixir Kernel.SpecialForms.^var用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.SpecialForms.case(condition, clauses)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。