【发布时间】:2009-12-07 21:37:05
【问题描述】:
是否可以定义具有可变长度参数列表的函数?
我知道我只会写:
function() -> function([]).
function(X) when not is_list(X) -> function([X]);
function(X) -> do_something_with_arguments(X).
但我想避免这种技术。
【问题讨论】:
标签: erlang
是否可以定义具有可变长度参数列表的函数?
我知道我只会写:
function() -> function([]).
function(X) when not is_list(X) -> function([X]);
function(X) -> do_something_with_arguments(X).
但我想避免这种技术。
【问题讨论】:
标签: erlang
一种方法是传递列表中的所有参数:
function(ListOfParameters)
然后您可以遍历上述ListOfParameters。这样,您可以让您的函数声明能够接受任意数量的“参数”,只需在声明中添加更多术语......但我不确定这是否是您所希望的。您是否按照 C vararg 参数列表的思路思考?在肯定的情况下,请阅读下一段。
您必须记住,Erlang 是基于模式匹配的。调用函数时,函数“声明”中的参数用作匹配模式。您必须抛开“过程式编程”思维方式,才能充分利用 Erlang 的力量。
【讨论】:
比@jldupont 更明确:不!
并不是刚刚没有实现,而是在Erlang中,同名但参数个数不同的函数被认为是不同的函数,所以不能添加。
【讨论】:
lists:map 或列表推导以获取结果列表;或lists:foldl 将返回值折叠到对列表中下一个元素的调用中。
apply。
apply/3,供灵药apply完成工作。 Elixir 建立在 erlang、erlang 库和 OTP 之上。