模式匹配
Elixir 根据其参数的值匹配对其主体的函数调用。
defmodule Math do
def factorial(0): do: 1
def factorial(n): do: n * factorial(n - 1)
end
这里,正数的阶乘匹配第二个子句,而 factorial(0)
匹配第一个子句。 (为简单起见,忽略负数)。Elixir 尝试从上到下匹配功能。如果第二个函数写在第一个函数之上,那么我们会得到一个意想不到的结果,因为它会进行无休止的递归。因为 factorial(0)
与 factorial(n)
匹配