English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يستخدم النحو 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