多子

多子句函数 属于 Elixir

72 个练习

关于 多子句函数

在 Elixir 中,一个函数可以有多个子句。要做到这一点,需要对函数的实参进行模式匹配,并使用守卫。

# pattern matching the argument
def number(7) do
  "Awesome, that's my favorite"
end

# using a guard
def number(n) when is_integer(n) do
  "That's not my favorite"
end

def number(_n) do
  "That's not even a number!"
end
  • 用多个函数子句可以把控制逻辑从函数中提取出来。
  • 子句会按顺序尝试,从源文件的顶部到底部,直到有一个成功为止。
  • 如果没有任何子句成功,BEAM 虚拟机会抛出FunctionClauseError。
  • 如果某个实参变量既没有在函数体中使用,也没有在守卫中使用,就应该在它的名字前加上_,否则编译器会发出警告。
  • 匿名函数也可以有多个子句。
    fn
      13 -> "Awesome, that's my favorite"
      _ -> "That's not my favorite"
    end
    

注意,不要把你从其他编程语言中可能知道的函数重载与多子句函数混为一谈。在 Elixir 中,函数仅由名称和参数个数来标识,而不是由实参的类型来标识(因为 Elixir 没有静态类型)。示例中的函数number/1无论有多少个子句,都被视为同一个函数。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 多子句函数

练习已锁定

再解锁 10 个练习即可练习 多子句函数