Unetway

Erlang - Funs

Funs используются для определения анонимных функций в Erlang. Общий синтаксис анонимной функции приведен ниже:

F = fun (Arg1, Arg2, ... ArgN) ->
   ...
End
  • F - это имя переменной, назначенное анонимной функции.
  • Arg1, Arg2, ... ArgN - это аргументы, которые передаются анонимной функции.

В следующем примере показано, как можно использовать анонимную функцию.

-module(helloworld). 
-export([start/0]). 

start() -> 
   A = fun() -> io:fwrite("Hello") end, 
   A().

В этой программе необходимо отметить следующее.

  • Анонимная функция назначается переменной A.
  • Анонимная функция через переменную A ().

Использование переменных

Анонимная функция имеет доступ к переменным, которые находятся за пределами области анонимной функции.

-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 находится вне области анонимной функции.
  • Анонимная функция все равно может получить доступ к переменной, определенной в глобальной области.

Функции внутри функций

Одним из других наиболее важных аспектов функций более высокого порядка является то, что вы можете определить функцию внутри функции. Давайте посмотрим пример того, как мы можем достичь этого.

-module(helloworld). 
-export([start/0]). 

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