Calling a Lua function từ C là khá thẳng về phía trước nhưng có cách nào để lưu trữ một hàm Lua ở đâu đó để sử dụng sau này không? Tôi muốn lưu trữ các hàm Lua do người dùng xác định được chuyển tới hàm C của tôi để sử dụng cho các sự kiện, tương tự như cách Connect function works in wxLua.Lưu trữ một hàm Lua?
Trả lời
kiểm tra sổ đăng ký (luaL_ref()
). nó quản lý một bảng đơn giản cho phép bạn lưu trữ bất kỳ giá trị Lua nào (như hàm) và tham chiếu đến nó từ C bằng một số nguyên đơn giản.
Cách dễ nhất để thực hiện việc này là để chức năng của bạn lấy "tên" và văn bản hàm lua. Sau đó, bạn tạo một bảng trong trình thông dịch (nếu nó không tồn tại) và sau đó lưu trữ hàm trong bảng bằng cách sử dụng tham số được đặt tên.
Trong ứng dụng của bạn chỉ cần giữ một danh sách tên hàm được gắn với mỗi sự kiện. Khi sự kiện cháy chỉ gọi tất cả các chức năng từ bảng của bạn có khóa khớp với tên trong danh sách.
Chức năng đó đã tồn tại và đó là bảng tham chiếu Lua như Javier nói. –
Sự cố khi đặt tên cho các hàm trong trường hợp này là chúng tôi muốn người dùng có thể xác định nhiều hàm có cùng tên cơ bản - ví dụ: "onclick" cho button1 khác với "onclick" cho button2. –
Xây dựng dựa trên câu trả lời của Javier, Lua có bảng đặc biệt có thể truy cập phổ biến được gọi là đăng ký, có thể truy cập thông qua API C bằng cách sử dụng chỉ mục giả LUA_REGISTRYINDEX
. Bạn có thể sử dụng luaL_ref
chức năng để lưu trữ bất kỳ giá trị Lua bạn thích trong registry (bao gồm cả chức năng Lua) và nhận lại một số nguyên có thể được sử dụng để đề cập đến nó từ C:
// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
- 1. Lua so với XML để lưu trữ dữ liệu
- 2. Tách một chuỗi và lưu trữ trong một mảng trong lua
- 3. hàm gọi lua từ một chuỗi có tên hàm
- 4. Chuyển tiếp định nghĩa một hàm trong Lua?
- 5. Gọi một Kho lưu trữ từ Kho lưu trữ
- 6. Lưu trữ con trỏ hàm trong std :: chức năng
- 7. MongoDB: Lỗi thực thi được lưu trữ hàm JavaScript
- 8. Scala: Làm thế nào để "lưu trữ" một hàm trong một var?
- 9. Làm thế nào để một hàm Postgres được lưu trữ trả về một bảng
- 10. Tại sao không thể lưu trữ một con trỏ hàm của một lớp cơ sở?
- 11. Bạn có thể lưu trữ một hàm trong một mảng PHP không?
- 12. Đọc một squashfs lưu trữ
- 13. Lưu trữ kho lưu trữ OSGI OBR?
- 14. Calling Lua chức năng
- 15. Thêm thay đổi từ một kho lưu trữ Mercurial sang một kho lưu trữ Mercurial khác
- 16. Làm cách nào để tạo Bảng Lua trong C++ và chuyển nó sang hàm Lua?
- 17. Làm cách nào để lưu trữ một con trỏ hàm trong cấu trúc?
- 18. Làm thế nào để lưu trữ một con trỏ hàm trong C#
- 19. Một kho lưu trữ có nên gọi một kho lưu trữ khác không? Hoặc một kho lưu trữ nên gọi một lớp dịch vụ?
- 20. Việc sử dụng một hàm trong vòng lặp foreach có lưu trữ kết quả hoặc gọi hàm mỗi lần không?
- 21. Làm cách nào để tải và thực thi tệp lua từ một tệp lua khác
- 22. Chức năng gọi hàm MySql được lưu trữ từ bên trong một thủ tục lưu sẵn gây ra lỗi
- 23. Làm thế nào để lưu một thủ tục lưu trữ?
- 24. SQL DataType - Cách lưu trữ một năm?
- 25. Lưu trữ một mảng trong HashMap
- 26. lưu trữ một ứng dụng trong glassfish
- 27. Lưu trữ một mảng với chrome.storage.local
- 28. Gọi một thủ tục lưu trữ python
- 29. TortoiseSVN, cách đổ một kho lưu trữ?
- 30. Lưu trữ toán tử trong một biến
Lua ref chỉ là quá mát mẻ - không thể tin rằng tôi đã sử dụng Lua tất cả thời gian này mà không biết về tính năng này. Cảm ơn! –