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

Daw*_*wid 8 erlang

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

我知道我可以写:

function() -> function([]).
function(X) when not is_list(X) -> function([X]);
function(X) -> do_something_with_arguments(X).
Run Code Online (Sandbox Code Playgroud)

但我想避免这种技术.

jld*_*ont 8

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

function(ListOfParameters)

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

你必须记住,Erlang是基于模式匹配的.函数"声明"中的参数在调用函数时用作匹配模式.你必须抛开你的"程序编程"思维模式,以便充分利用Erlang的力量.


rvi*_*ing 8

要比@jldupont更明确:不!

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