English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Fun é usado para definir funções anônimas no Erlang. A sintaxe geral da função anônima é a seguinte:
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.
-> 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.
5
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.-
-> 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.
5 6
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.
-> 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.
16