2009-02-10 29 views

Trả lời

23

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.

+2

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! –

0

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.

+0

Chức năng đó đã tồn tại và đó là bảng tham chiếu Lua như Javier nói. –

+0

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. –

13

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); 
Các vấn đề liên quan