4
我很難理解默認參數如何與命名函數中的多個子句進行交互。歸結起來,爲什麼下面的代碼段工作?Elixir使用多個子句的命名函數的默認參數
defmodule Lists do
def sum([], total \\ 0), do: total
def sum([h|t], total), do: h + sum(t, total)
end
從我的理解這被編譯器擴展爲:
defmodule Lists do
def sum([]), do: sum([], 0)
def sum([], total), do: total
def sum([h|t], total), do: h + sum(t, total)
end
所以我希望下面的情況發生:
iex(1)> Lists.sum [1,2,3,4]
** (FunctionClauseError) no function clause matching in Lists.sum/1
,而不是它的工作原理:
iex(1)> Lists.sum [1,2,3,4]
10
使用Elixir 0.12.4。
這個答案來瘋狂快:)謝謝! –