English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Erlang Fun

يستخدم النحو Fun لتحديد الوظائف المجهولة في Erlang. النحو العام للوظائف المجهولة كالتالي:

النحو

F = fun (Arg1, Arg2, ... ArgN) ->
   ...
نهاية

شرح

  • F −هذه هي أسماء المتغيرات التي يتم تخصيصها للوظيفة المجهولة.

  • Arg1, Arg2, ... ArgN −هذه هي المعلمات التي يتم تمريرها إلى الوظيفة المجهولة.

يظهر هذا المثال كيفية استخدام الوظائف المجهولة.

实例

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

关于上述程序,需要注意以下几点。

  • تم تخصيص الوظيفة المجهولة لتسمية المتغير A.

  • الوظيفة المجهولة A() من خلال المتغير.

当我们运行上面的程序时,我们将得到以下结果。

"Hello"

مثال آخر على وظيفة مجهولة، ولكن هذه تستخدم المعلمات.

-module(helloworld). 
-export([start/0]). 
start() -> 
   A = fun(X) -> 
      io:fwrite("~p~n",[X]) 
      end, 
   A(5).

当我们运行上面的程序时,我们将得到以下结果。

输出

5

استخدام المتغيرات

الوظائف المجهولة تملك القدرة على الوصول إلى المتغيرات خارج نطاق الوظيفة المجهولة. دعونا نرى مثالاً على ذلك-

实例

-module(helloworld). 
-export([start/0]). 
start() -> 
   B = 6, 
   A = fun(X) -> 
      io:fwrite("~p~n",[X]), 
      io:fwrite("~p~n",[B]) 
      end, 
   A(5).

关于上述程序,需要注意以下几点。

  • 变量B在匿名函数的范围之外。

  • 匿名函数仍然可以访问在全局范围内定义的变量。

当我们运行上面的程序时,我们将得到以下结果。

输出

5
6

函数中的函数

高阶函数的另一个最强大的方面之一是,您可以在函数中定义一个函数。让我们来看一个如何实现此目标的示例。

实例

-module(helloworld). 
-export([start/0]). 
start() -> 
   Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end, 
   A = Adder(6), 
   A(10).

关于上述程序,需要注意以下几点。

  • 加法器是一个高阶函数,定义为fun(X)。

  • 加法器函数fun(X)引用了另一个函数fun(Y)。

当我们运行上面的程序时,我们将得到以下结果。

输出

16