Переменная длина списка аргументов функции в Erlang - PullRequest
8 голосов
/ 07 декабря 2009

Можно ли определить функцию с помощью списка аргументов переменной длины?

Я знаю, что могу написать просто:

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

Но я хочу избежать этой техники.

Ответы [ 2 ]

8 голосов
/ 07 декабря 2009

Быть гораздо более явным, чем @jldupont: Нет!

Дело не в том, что оно просто не было реализовано, но в функциях Эрланга с одинаковыми именами, но разным количеством аргументов считается разными функциями, поэтому их нельзя добавить.

8 голосов
/ 07 декабря 2009

Один из способов сделать это - передать все аргументы в списке:

function(ListOfParameters)

и затем вы можете перебрать указанное ListOfParameters. Таким образом, вы можете сделать так, чтобы объявление вашей функции могло принимать любое количество «параметров», просто добавьте больше терминов в объявление ... но я не уверен, что это то, на что вы надеялись. Думаете ли вы в соответствии со списком параметров C vararg? В положительном случае прочитайте следующий абзац.

Вы должны помнить, что Erlang основан на сопоставлении с образцом. Аргументы в функции «объявление» служат шаблоном сопоставления при вызове функции. Вам придется оставить в стороне свое мышление "процедурного программирования" , чтобы полностью использовать силу Эрланга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...