为什么Elixir在函数中没有保护条款?

时间:2014-04-09 05:48:36

标签: functional-programming elixir

为什么Elixir在模块中有函数定义的保护子句而不是函数本身?我发现以下更直观:

def fibonnaci(n) do
  when n == 0, do: 0
  when n == 1, do: 1
  when n > 1 do
    fibonnaci(n - 2) + fibonnaci(n - 1)
  end
end

1 个答案:

答案 0 :(得分:4)

我不确定这是关于如何编写该代码的问题,也不知道为什么语言是这样编写的。假设它是第一个,你有:

def fibonnaci(0), do: 0
def fibonnaci(1), do: 1
def fibonnaci(n), do: fibonnaci(n - 2) + fibonnaci(n - 1)

如果你想要在同一个函数体中的所有东西,你可以使用一个案例:

def fibonnaci(n) do
  case n do
    0 -> ...

如果你的意思是后者,一旦你更熟悉这种语言,答案可能会变得更加清晰,因为提出的例子不是有效的语法(Elixir依赖于一个简单的语法,只有很少的关键字,一切都遵循相同的规则)。