是否可以使用变量长度的参数列表定义函数?
我知道我可以写:
function() -> function([]).
function(X) when not is_list(X) -> function([X]);
function(X) -> do_something_with_arguments(X).
但我想避免这种技术。
答案 0 :(得分:8)
一种方法是传递列表中的所有参数:
function(ListOfParameters)
然后你可以遍历所说的ListOfParameters
。这样,你可以让你的函数声明能够接受任意数量的“参数”,只需在声明中添加更多的术语......但我不确定这是你所希望的。您是否正在考虑C vararg
参数列表?在肯定的情况下,请阅读下一段。
你必须记住Erlang是基于模式匹配的。函数“声明”中的参数在调用函数时用作匹配模式。你必须不要理会你的“程序编程”思维,以便充分利用Erlang的力量。
答案 1 :(得分:8)
比@jldupont更明确:不!
并不是它刚刚没有实现,而是在具有相同名称但不同参数数量的Erlang函数中被认为是不同的函数,因此无法添加。