Tôi có một ứng dụng chạy tập lệnh Lua. Mỗi kịch bản Lua có khả năng chạy nhiều lần. Một số tập lệnh thậm chí có thể chạy mỗi lần nhấn một phím.Lua - Khôi phục trạng thái của tập lệnh mà không cần sửa lại nó
Tôi muốn các tập lệnh này được "đặt lại" giữa mỗi lần chạy. I.e nếu người dùng đặt biến Foo, thì Foo sẽ không tồn tại trong tập lệnh vào lần tiếp theo nó chạy cho đến khi người dùng định nghĩa lại nó.
Vấn đề là, nếu tôi muốn có một hành vi như vậy, tôi cần phải tạo một lua_State mới mọi lúc, sau đó mở thư viện vào nó mọi lúc, và sau đó phân tích cú pháp tệp kịch bản mọi lúc, điều này dường như rất không được tối ưu hóa.
Tải thư viện có thể là một hoạt động khá nhẹ (tôi giả định), nhưng việc phân tích cú pháp các tập lệnh có lẽ không phải.
Có cách nào để đặt lại trạng thái của tập lệnh Lua (nghĩa là biến do người dùng xác định rõ ràng) mà không tạo lua_State mới và sửa lại toàn bộ tệp kịch bản Lua không? Tôi chỉ muốn các tệp kịch bản được phân tích cú pháp một lần khi khởi động ứng dụng vì chúng không được sửa đổi vào thời gian chạy.
Cảm ơn bạn. :)
EDIT: Tôi tìm thấy chủ đề này nhưng nó không được trình bày chi tiết về để làm điều đó: http://lua-users.org/lists/lua-l/2006-01/msg00493.html
EDIT: lua_setfenv dường như có liên quan đến đó. Tôi sẽ đào thêm một chút nữa.
EDIT: Dường như không có lua_setfenv nào hơn LUA 5.2. Vì tôi đang sử dụng 5.3, tôi sẽ phải thiết lập môi trường (tức là một bảng ẩn có tên _ENV nơi các biến được lưu trữ) để làm điều đó, và do đó tải lại mọi thứ, đó là những gì tôi không muốn làm ...
Bạn có thể làm điều đó Lua bên với coroutines có lẽ? – warspyking