为什么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
答案 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依赖于一个简单的语法,只有很少的关键字,一切都遵循相同的规则)。