Lua là một ngôn ngữ động và chức năng chỉ là một loại giá trị có thể được gọi với toán tử ()
. Vì vậy, bạn không thực sự cần phải chuyển tiếp khai báo hàm này nhiều như đảm bảo rằng biến trong phạm vi khi bạn gọi nó là biến mà bạn nghĩ nó là.
Đây không phải là vấn đề ở tất cả các biến toàn cầu chứa hàm, vì môi trường toàn cầu là nơi mặc định để xem xét để giải quyết tên biến. Tuy nhiên, đối với các hàm cục bộ, bạn cần đảm bảo rằng biến cục bộ đã nằm trong phạm vi từ điểm mà bạn cần gọi giá trị nó lưu trữ, và cũng đảm bảo rằng trong thời gian chạy nó thực sự đang giữ một giá trị có thể được gọi .
Ví dụ, đây là một cặp chức năng địa phương lẫn nhau đệ quy:
local a,b
a = function() return b() end
b = function() return a() end
Tất nhiên, đó cũng là một ví dụ của việc sử dụng đuôi cuộc gọi cho phép đệ quy vô hạn mà không làm gì, nhưng điểm ở đây là khai báo. Bằng cách khai báo các biến với local
trước khi có một hàm được lưu trữ trong nó, các tên đó được biết là các biến cục bộ trong phạm vi từ vựng của phần còn lại của ví dụ. Sau đó, hai hàm được lưu trữ, mỗi hàm đề cập đến biến khác.
Ok, cảm ơn. Tôi đã tự tìm ra nó, nhưng câu trả lời này rất hữu ích. –