Erlang - Funs
Funs được sử dụng để xác định các hàm ẩn danh trong Erlang. Cú pháp chung của một hàm ẩn danh được đưa ra dưới đây:
Cú pháp
F = fun (Arg1, Arg2, ... ArgN) ->
...
End
Ở đâu
F - Đây là tên biến được gán cho hàm ẩn danh.
Arg1, Arg2, ... ArgN - Đây là các đối số được chuyển cho hàm ẩn danh.
Ví dụ sau đây cho thấy cách hàm ẩn danh có thể được sử dụng.
Thí dụ
-module(helloworld).
-export([start/0]).
start() ->
A = fun() -> io:fwrite("Hello") end,
A().
Những điều sau đây cần được lưu ý về chương trình trên.
Hàm vô danh được gán cho biến A.
Hàm ẩn danh qua biến A ().
Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.
“Hello”
Một ví dụ khác về hàm ẩn danh như sau, nhưng đây là với việc sử dụng các tham số.
-module(helloworld).
-export([start/0]).
start() ->
A = fun(X) ->
io:fwrite("~p~n",[X])
end,
A(5).
Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.
Đầu ra
5
Sử dụng các biến
Hàm Anonymous có khả năng truy cập các biến nằm ngoài phạm vi của hàm ẩn danh. Hãy xem một ví dụ về điều này -
Thí dụ
-module(helloworld).
-export([start/0]).
start() ->
B = 6,
A = fun(X) ->
io:fwrite("~p~n",[X]),
io:fwrite("~p~n",[B])
end,
A(5).
Những điều sau đây cần được lưu ý về chương trình trên.
Biến B nằm ngoài phạm vi của hàm ẩn danh.
Hàm ẩn danh vẫn có thể truy cập vào biến được xác định trong phạm vi toàn cục.
Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.
Đầu ra
5
6
Các chức năng trong Chức năng
Một trong những khía cạnh mạnh mẽ nhất khác của các hàm bậc cao là bạn có thể định nghĩa một hàm trong một hàm. Hãy xem một ví dụ về cách chúng ta có thể đạt được điều này.
Thí dụ
-module(helloworld).
-export([start/0]).
start() ->
Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end,
A = Adder(6),
A(10).
Những điều sau đây cần được lưu ý về chương trình trên.
Adder là một hàm bậc cao hơn được định nghĩa là fun (X).
Hàm Adder fun (X) có tham chiếu đến một hàm fun (Y) khác.
Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.
Đầu ra
16