Erlang中函数参数列表的可变长度

时间:2009-12-07 00:29:21

标签: erlang

是否可以使用变量长度的参数列表定义函数?

我知道我可以写:

function() -> function([]).
function(X) when not is_list(X) -> function([X]);
function(X) -> do_something_with_arguments(X).

但我想避免这种技术。

2 个答案:

答案 0 :(得分:8)

一种方法是传递列表中的所有参数:

function(ListOfParameters)

然后你可以遍历所说的ListOfParameters。这样,你可以让你的函数声明能够接受任意数量的“参数”,只需在声明中添加更多的术语......但我不确定这是你所希望的。您是否正在考虑C vararg参数列表?在肯定的情况下,请阅读下一段。

你必须记住Erlang是基于模式匹配的。函数“声明”中的参数在调用函数时用作匹配模式。你必须不要理会你的“程序编程”思维,以便充分利用Erlang的力量。

答案 1 :(得分:8)

比@jldupont更明确:不!

并不是它刚刚没有实现,而是在具有相同名称但不同参数数量的Erlang函数中被认为是不同的函数,因此无法添加。