是否可以使用變長參數列表定義函數?Erlang函數參數列表的可變長度
我知道我可以只寫:
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).
但我想避免這種技術。
一種方式來做到這一點是通過所有參數的清單:
function(ListOfParameters)
,然後你可以遍歷說ListOfParameters
。這樣,你可以讓你的函數聲明能夠接受任意數量的「參數」,只需要在聲明中添加更多的術語......但我不確定那是你所希望的。您是否正在考慮C vararg
參數列表的行?在積極的情況下,請閱讀下一段。
你必須記住,Erlang基於模式匹配。函數「聲明」中的參數用作調用函數時的匹配模式。你必須放下你的「程序編程」心態,以充分利用Erlang的力量。
要比@jldupont更明確:不!
這並不是說它沒有被實現,但是在Erlang中,具有相同名稱但參數個數不同的函數被認爲是不同的函數,所以它不能被添加。
是否有辦法分解參數列表並將每個參數應用於函數? – CMCDragonkai 2014-09-12 08:37:21
@CMCDragonkai你的意思是將相同的功能應用於每個元素?用於這種用途:'list:map'或列表解析來獲取結果列表;或'lists:foldl'將返回值摺疊到對列表中下一個元素的調用中。 – rvirding 2014-09-12 09:46:08
實際上,如果給出一個參數列表,我想調用另一個函數並將該列表作爲參數集傳遞。在Elixir中,有'apply'。 – CMCDragonkai 2014-09-12 11:25:58
你的答案的第一部分與我提到的技術相同,我想過類似於C的東西,所以我閱讀第二部分,現在我必須回到我的第一個解決方案。感謝您的迴應! – 2009-12-07 00:52:29
我的榮幸!與Erlang玩得開心! – jldupont 2009-12-07 00:57:35
如果你想要一個變量列表的參數,那麼你最好這樣做,然後你將不得不執行另一個函數,而將變量列表的參數傳遞給這個函數? – CMCDragonkai 2014-09-12 08:42:49