如何在 elixir 中定义具有多个子句和可选参数的函数
How to define a function with multiple clauses and optional parameters in elixir
我正在尝试了解如何正确定义具有多个子句和可选参数的函数。当我写
def sum([], total \ 0), do: total
def sum([h|t], total), do: h + sum(t, total)
(问题Elixir default parameters for named functions with multiple clauses)
我收到警告:
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
我觉得 sum
的定义符合这个建议。
任何人都可以解释为什么会发生这种情况以及定义 sum
和消除警告的正确方法是什么。
我的 elixir 版本是 1.12.2.
提前致谢
声明一个没有 do
带有默认块的 head 子句
def sum(list, total \ 0) # ⇐ THIS
def sum([], total), do: total
def sum([h | t], total), do: h + sum(t, total)
我正在尝试了解如何正确定义具有多个子句和可选参数的函数。当我写
def sum([], total \ 0), do: total
def sum([h|t], total), do: h + sum(t, total)
(问题Elixir default parameters for named functions with multiple clauses)
我收到警告:
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
我觉得 sum
的定义符合这个建议。
任何人都可以解释为什么会发生这种情况以及定义 sum
和消除警告的正确方法是什么。
我的 elixir 版本是 1.12.2.
提前致谢
声明一个没有 do
带有默认块的 head 子句
def sum(list, total \ 0) # ⇐ THIS
def sum([], total), do: total
def sum([h | t], total), do: h + sum(t, total)