当前位置: 首页 > 文档资料 > Erlang 中文教程 >

功能( Functions)

优质
小牛编辑
126浏览
2023-12-01

Erlang被称为函数式编程语言,因此你会期望看到很多函数在Erlang中如何工作。 本章介绍了Erlang中的所有功能。

定义一个函数 (Defining a Function)

函数声明的语法如下 -

语法 (Syntax)

FunctionName(Pattern1… PatternN) ->
Body;

Where,

  • FunctionName - 函数名称是一个原子。

  • Pattern1… PatternN - 每个参数都是一个模式。 参数的数量N是函数的arity。 函数由模块名称,函数名称和arity唯一定义。 也就是说,具有相同名称和相同模块但具有不同arities的两个函数是两个不同的函数。

  • 正文 - 子句主体由一系列用逗号(,)分隔的表达式组成:

以下程序是使用函数的简单示例 -

例子 (Example)

-module(helloworld). 
-export([add/2,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
start() -> 
   add(5,6).

关于上述计划应注意以下几点 -

  • 我们定义了两个函数,一个叫做add ,它有2个参数,另一个是start函数。

  • 这两个函数都是使用导出函数定义的。 如果我们不这样做,我们将无法使用该功能。

  • 一个函数可以在另一个函数中调用。 这里我们从start函数调用add函数。

上述计划的输出将是 -

输出 (Output)

11

匿名函数

匿名函数是一个函数,它没有与之关联的名称。 Erlang具有定义匿名函数的功能。 以下程序是匿名函数的示例。

例子 (Example)

-module(helloworld). 
-export([start/0]). 
start() -> 
   Fn = fun() -> 
      io:fwrite("Anonymous Function") end, 
   Fn().

关于上述例子需要注意以下几点 -

  • 匿名函数使用fun()关键字定义。

  • 函数被分配给名为Fn的变量。

  • 函数通过变量名称调用。

上述计划的输出将是 -

输出 (Output)

Anonymous Function

具有多个参数的函数

可以使用零个或多个参数定义Erlang函数。 函数重载也是可能的,其中您可以多次定义具有相同名称的函数,只要它们具有不同数量的参数即可。

在以下示例中,函数demo使用每个函数定义的多个参数进行定义。

例子 (Example)

-module(helloworld). 
-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函数。 但是第一个add函数的定义包含两个参数,第二个参数包含三个参数。

上述计划的输出将是 -

输出 (Output)

11
17

具有保护序列的功能

Erlang中的函数也具有保护序列的能力。 这些只是表达式,只有当评估为true时才会导致函数运行。

具有保护序列的函数的语法显示在以下程序中。

语法 (Syntax)

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

Where,

  • FunctionName - 函数名称是一个原子。

  • Pattern1… PatternN - 每个参数都是一个模式。 参数的数量N是函数的arity。 函数由模块名称,函数名称和arity唯一定义。 也就是说,具有相同名称和相同模块但具有不同arities的两个函数是两个不同的函数。

  • 正文 - 子句主体由一系列表达式组成,这些表达式用逗号(,)分隔。

  • GuardSeq1 - 这是在调用函数时得到的表达式。

以下程序是使用具有保护序列的函数的简单示例。

例子 (Example)

-module(helloworld). 
-export([add/1,start/0]). 
add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 
start() -> 
   add(4).

上述计划的输出是 -

输出 (Output)

4

如果add函数被称为add(3) ,程序将导致错误。