具有不同参数计数的函数

时间:2011-06-22 08:28:46

标签: erlang

我只是想知道是否有任何方法可以使用不同的参数计数创建相同的函数?像这样:

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).

正如我所看到的,Erlang不允许同时使用一个和两个参数创建函数。有没有一种很好的方法来创建这样的功能,或者我需要使用两种不同的功能?

3 个答案:

答案 0 :(得分:9)

你快到了!

如果存在相同的arity(参数数量),则只能使用;继续功能头。您可以愉快地使用相同名称但不同的arity函数 - 只需使用.来终止每个arity块:

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).

答案 1 :(得分:6)

您可以使用两个不同的函数,这些函数具有相同的名称,但参数的数量不同:

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).

exportfun等中,您可以将其称为FunName/NumberOfArgs,例如

-export([sum_of_n/1]).

答案 2 :(得分:1)

通过本教程,您将了解Erlang中的许多内容。

learn you some erlang for great good