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

Erlang中函数参数列表的可变长度,erlang,Erlang,可以用可变长度的参数列表定义函数吗 我知道我可以写: function() -> function([]). function(X) when not is_list(X) -> function([X]); function(X) -> do_something_with_arguments(X). 但是我想避免这种技术。一种方法是在列表中传递所有参数: 函数(参数列表) 然后,您可以迭代上述参数列表。这样,您可以让您的函数声明能够接受任意数量的“参数”,只需在声明中添加更

可以用可变长度的参数列表定义函数吗

我知道我可以写:

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

但是我想避免这种技术。

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

函数(参数列表)

然后,您可以迭代上述
参数列表
。这样,您可以让您的函数声明能够接受任意数量的“参数”,只需在声明中添加更多的术语。。。但我不确定那是你所希望的。您是否按照C
vararg
参数列表的思路思考?如果是肯定的,请阅读下一段


您必须记住Erlang是基于模式匹配的。调用函数时,函数“声明”中的参数充当匹配模式。为了充分利用Erlang的力量,你必须抛开你的“程序编程”思维。

要比@jldupont更明确:不


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

答案的第一部分与我提到的技术相同,我想了一些类似于C的东西,所以我读了第二部分,所以现在我不得不回到我的第一个解决方案。感谢您的回复!我的荣幸!玩得开心!如果您想要一个可变参数列表,那么在将可变参数列表传递给另一个函数的同时,您必须执行另一个函数,那么最好的做法是什么?有没有办法分解参数列表并将每个参数应用于函数?@cmcdragokai您的意思是将相同的函数应用于每个元素?对于该用途:
列表:映射
或列表理解以获取结果列表;或者
lists:foldl
将返回值折叠到对列表中下一个元素的调用中。实际上,如果给定一个参数列表,我想调用另一个函数并将该列表作为参数集传递。在Elixir中有一个
apply
。在erlang中当然有一个
apply/3
,Elixir
apply
使用它来完成工作。Elixir构建在erlang、erlang库和OTP之上。