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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。