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

Fun do Erlang

Fun é usado para definir funções anônimas no Erlang. A sintaxe geral da função anônima é a seguinte:

Sintaxe

F = fun(Arg1, Arg2, ... ArgN) ->
   ...
Fim

Descrição

  • F −Este é o nome da variável atribuída à função anônima.

  • Arg1, Arg2, ... ArgN −Estes são os parâmetros passados para a função anônima.

Aqui está um exemplo de como usar funções anônimas.

Instância

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

Quanto ao programa acima, há alguns pontos a serem notados.

  • A função anônima é atribuída à variável A.

  • Função anônima A() através de uma variável.

Quando executarmos o programa acima, obteremos os seguintes resultados.

"Olá"

Aqui está outro exemplo de função anônima, mas agora com parâmetros.

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

Quando executarmos o programa acima, obteremos os seguintes resultados.

Saída

5

Usando variáveis

As funções anônimas têm a capacidade de acessar variáveis fora do escopo da função anônima. Vamos ver um exemplo.-

Instância

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

Quanto ao programa acima, há alguns pontos a serem notados.

  • A variável B está fora do escopo da função anônima.

  • Funções anônimas ainda podem acessar variáveis definidas globalmente.

Quando executarmos o programa acima, obteremos os seguintes resultados.

Saída

5
6

Função dentro de função

Um dos aspectos mais poderosos de uma função de ordem superior é que você pode definir uma função dentro de uma função. Vamos ver um exemplo de como alcançar esse objetivo.

Instância

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

Quanto ao programa acima, há alguns pontos a serem notados.

  • O somador é uma função de ordem superior, definida como fun(X).

  • A função de somador fun(X) chama outra função fun(Y).

Quando executarmos o programa acima, obteremos os seguintes resultados.

Saída

16