有没有办法定义具有不同数量的重载函数,例如在 C# 中我可以这样做:
foo(bar)
or
foo(bar, baz)
在 Elixir 中,唯一的方法是将它们放在单独的模块中,这很快就会变得混乱。有什么办法解决吗?
编辑:我做了一个错误的假设。我看到的重载函数的示例恰好具有相同的数量,因此我(错误地)认为这是一个要求。函数由其名称和数量唯一标识,因此实际上您可以重载具有不同数量的函数。
在 Erlang 和 Elixir 中,与许多其他语言(例如 C#)不同,函数通过其名称和数量来唯一标识,因此从技术上讲foo(bar)
and foo(bar, baz)
是完全不同的功能。但这实际上只是一个技术问题,要在 Elixir 中编写“重载”函数,您可以编写类似于以下定义的内容sum
:
defmodule Math do
def sum(list), do: sum(list, 0)
def sum([], acc), do: acc
def sum([h|t], acc), do: sum(t, acc + h)
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)