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

Fun Erlang

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