函数声明的语法如下-
FunctionName(Pattern1… PatternN) -> Body;
FunctionName - 函数名称是一个原子。
Pattern1…PatternN - 每个参数都是一个模式。
Body - 子句主体由用逗号(,)分隔的一系列表达式组成:
以下程序是使用函数的简单示例-
-module(helloLearnfk). -export([add/2,start/0]). add(X,Y) -> Z=X+Y, io:fwrite("~w~n",[Z]). start() -> add(5,6).
关于上述程序,应注意以下几点:
我们定义了两个函数,一个叫做 add ,它带有两个参数,另一个是 start 函数。
这两个函数都由导出函数定义,如果不这样做,将无法使用该函数。
可以在另一个函数内部调用一个函数,在这里,我们从start函数开始调用add 函数。
上面程序的输出将是-
11
匿名函数是没有名称的函数, Erlang具有定义匿名函数的函数,以下程序是匿名函数的示例。
-module(helloLearnfk). -export([start/0]). start() -> Fn=fun() -> io:fwrite("Anonymous Function") end, Fn().
需要注意以下几点:
匿名函数是使用 fun()关键字定义的。
该函数已分配给名为Fn的变量。
通过变量名称调用该函数。
上面程序的输出将是-
Anonymous Function
在以下示例中,为每个函数定义使用多个参数定义了函数演示。
-module(helloLearnfk). -export([add/2,add/3,start/0]). add(X,Y) -> Z=X+Y, io:fwrite("~w~n",[Z]). add(X,Y,Z) -> A=X+Y+Z, io:fwrite("~w~n",[A]). start() -> add(5,6), add(5,6,6).
在上面的程序中,我们两次定义了add函数,但是第一个添加函数的定义包含两个参数,第二个添加函数包含三个参数。
上面程序的输出将是-
11 17
Erlang中的函数还具有保护序列的函数,这些只不过是表达式,仅当计算输出为true时,这些表达式才会使函数运行。
以下程序显示了带有保护序列的函数的语法。
FunctionName(Pattern1… PatternN) [when GuardSeq1]-> Body;
FunctionName - 函数名称是一个原子。
Pattern1…PatternN - 每个参数都是一个模式。
Body - 子句主体由用逗号(,)分隔的一系列表达式组成。
GuardSeq1 - 这是调用函数时要求值的表达式。
以下程序是带有保护序列的函数使用的简单示例。
-module(helloLearnfk). -export([add/1,start/0]). add(X) when X>3 -> io:fwrite("~w~n",[X]). start() -> add(4).
上面程序的输出是-
4
如果将add函数称为 add(3),则该程序将导致错误。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)