我试图了解如何正确定义具有多个子句和可选参数的函数。当我写作时
def sum([], total \\ 0), do: total
def sum([h|t], total), do: h + sum(t, total)
Run Code Online (Sandbox Code Playgroud)
我收到警告:
warning: def sum/2 has multiple clauses and also declares default values.
In such cases, the default values should be defined in a header. Instead of:
def foo(:first_clause, b \\ :default) do ... end
def foo(:second_clause, b) do ... end
one should write:
def foo(a, b \\ :default)
def foo(:first_clause, b) do ... end
def foo(:second_clause, b) do ... end
Run Code Online (Sandbox Code Playgroud)
我觉得 的定义sum遵循了这个建议。
谁能解释为什么会发生这种情况以及定义的正确方法是什么sum和消除警告的正确方法是什么。
我的 Elixir 版本是 1.12.2。
提前致谢
声明不带头子句do声明一个不带默认块的
def sum(list, total \\\\ 0) # \xe2\x87\x90 THIS\n\ndef sum([], total), do: total\ndef sum([h | t], total), do: h + sum(t, total)\nRun Code Online (Sandbox Code Playgroud)\n