Elixir编程:函数、模块及相关特性深入解析
1. 守卫子句(Guard Clauses)
在Elixir中,模式匹配可根据传入的参数决定调用哪个函数。但如果需要根据参数类型或涉及参数值的测试来进行区分,就可以使用守卫子句。守卫子句是通过一个或多个 when 关键字附加到函数定义上的谓词。在进行模式匹配时,Elixir先进行基于参数的常规匹配,然后计算 when 谓词,只有当至少一个谓词为真时,才会执行该函数。
1.1 示例代码
defmodule Guard do
def what_is(x) when is_number(x) do
IO.puts "#{x} is a number"
end
def what_is(x) when is_list(x) do
IO.puts "#{inspect(x)} is a list"
end
def what_is(x) when is_atom(x) do
IO.puts "#{x} is an atom"
end
end
Guard.what_is(99)
# => 99 is a number
Guard.what_is(:cat)
# => cat is an atom
Guard.what_is([1,2,3])
# => [1,2,3] is a list
1.2 阶乘函数示例
在之前的阶乘函数示例中,如果传入负数,函数会陷入无限循环。可以添加守卫子句来避免这种情况。
超级会员免费看
订阅专栏 解锁全文
83

被折叠的 条评论
为什么被折叠?



