Функция с разным количеством параметров - PullRequest
2 голосов
/ 22 июня 2011

Мне просто интересно, есть ли способ создать одну и ту же функцию с разным количеством параметров?Примерно так:

sum_of_n(Num)->
    sum_of_n(Num, 0);
sum_of_n(0, Accum)->
    Accum;
sum_of_n(Num, Accum) ->
    sum_of_n(Num - 1, Accum + Num).

Как я вижу, Эрланг не позволяет создавать функцию с одним и двумя параметрами одновременно.Есть хороший способ создать такую ​​функцию, или мне нужно использовать две разные функции?

Ответы [ 3 ]

9 голосов
/ 22 июня 2011

Вы были почти там!

Вы продолжаете заголовки функций только с ;, если есть такая же арность (количество аргументов).Вы можете счастливо иметь функции с тем же именем, но разной арностью - просто используйте . для завершения каждого блока арности:

sum_of_n(Num)->
    sum_of_n(Num, 0).

sum_of_n(0, Accum)->
    Accum;
sum_of_n(Num, Accum) ->
    sum_of_n(Num - 1, Accum + Num).
6 голосов
/ 22 июня 2011

Вы можете иметь две разные функции с одним и тем же именем, но с разным количеством аргументов:

sum_of_n(Num)->
    sum_of_n(Num, 0). %% Note the period

sum_of_n(0, Accum)->
    Accum;
sum_of_n(Num, Accum) ->
    sum_of_n(Num - 1, Accum + Num).

В export, fun и т. Д. Вы можете ссылаться на них как FunName/NumberOfArgs, например,

-export([sum_of_n/1]).
1 голос
/ 22 июня 2011

С этим уроком вы будете уверены во многих вещах в Erlang.

<b><a href="http://learnyousomeerlang.com/" rel="nofollow">learn you some erlang for great good</a></b>

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