Erlang - Funs
Zabawy służą do definiowania anonimowych funkcji w Erlang. Ogólna składnia funkcji anonimowej jest podana poniżej -
Składnia
F = fun (Arg1, Arg2, ... ArgN) ->
...
End
Gdzie
F - To jest nazwa zmiennej przypisana do funkcji anonimowej.
Arg1, Arg2, ... ArgN - To są argumenty, które są przekazywane do funkcji anonimowej.
Poniższy przykład pokazuje, jak można używać funkcji anonimowej.
Przykład
-module(helloworld).
-export([start/0]).
start() ->
A = fun() -> io:fwrite("Hello") end,
A().
Na temat powyższego programu należy zwrócić uwagę na następujące kwestie.
Funkcja anonimowa jest przypisana do zmiennej A.
Funkcja anonimowa za pośrednictwem zmiennej A ().
Po uruchomieniu powyższego programu otrzymamy następujący wynik.
“Hello”
Kolejny przykład funkcji anonimowej jest następujący, ale to z użyciem parametrów.
-module(helloworld).
-export([start/0]).
start() ->
A = fun(X) ->
io:fwrite("~p~n",[X])
end,
A(5).
Po uruchomieniu powyższego programu otrzymamy następujący wynik.
Wynik
5
Korzystanie ze zmiennych
Funkcja anonimowa ma możliwość dostępu do zmiennych, które są poza zakresem funkcji anonimowej. Spójrzmy na przykład -
Przykład
-module(helloworld).
-export([start/0]).
start() ->
B = 6,
A = fun(X) ->
io:fwrite("~p~n",[X]),
io:fwrite("~p~n",[B])
end,
A(5).
Na temat powyższego programu należy zwrócić uwagę na następujące kwestie.
Zmienna B znajduje się poza zakresem funkcji anonimowej.
Funkcja anonimowa może nadal uzyskać dostęp do zmiennej zdefiniowanej w zasięgu globalnym.
Po uruchomieniu powyższego programu otrzymamy następujący wynik.
Wynik
5
6
Funkcje w ramach funkcji
Jednym z innych najpotężniejszych aspektów funkcji wyższego rzędu jest to, że można zdefiniować funkcję w ramach funkcji. Zobaczmy przykład, jak możemy to osiągnąć.
Przykład
-module(helloworld).
-export([start/0]).
start() ->
Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end,
A = Adder(6),
A(10).
Na temat powyższego programu należy zwrócić uwagę na następujące kwestie.
Adder to funkcja wyższego rzędu zdefiniowana jako fun (X).
Funkcja sumatora fun (X) ma odniesienie do innej funkcji fun (Y).
Po uruchomieniu powyższego programu otrzymamy następujący wynik.
Wynik
16