2009-02-10 35 views

cevap

23

kayıt defterini kontrol edin (luaL_ref()). herhangi bir Lua değerini (işlev gibi) depolamanıza ve basit bir tam sayı ile C'ye başvurmanızı sağlayan basit bir tabloyu yönetir.

+2

Lua ref çok iyidir - Bu özelliği bilmeden Lua'yı tüm bu zaman boyunca kullandığımı düşünemiyorum. Teşekkürler! –

0

Bunu yapmanın en kolay yolu, işlevinizin "ad" ve lua işlev metnini almasıdır. Sonra yorumlayıcıda bir tablo yaratırsınız (eğer mevcut değilse) ve daha sonra isimlendirilen parametreyi kullanarak tablodaki işlevi saklarsınız.

Uygulamanızda, her etkinliğe bağlı işlev adlarının listesini tutmaya devam edin. Etkinlik tetiklendiğinde, tablonuzdaki tüm işlevler, listedeki isimlerle eşleşen anahtarları çağırır.

+0

Bu işlev zaten var ve Javier'in dediği gibi Lua referans tablosu. örneğin - –

+0

bu durumda fonksiyonlarını adlandırma sorunu biz kullanıcı temelde aynı isimde birden fazla işlevi tanımlamak mümkün istiyorum olmasıdır button1 için "onclick", button2 için "onclick" den farklıdır. –

13

Yapı Javier yanıta, Lua özel evrensel erişilebilir tablo sözde endeksi LUA_REGISTRYINDEX kullanarak C API yoluyla erişilebilir kayıt denilen vardır. Sen (Lua fonksiyonları dahil) kayıt gibi herhangi Lua değerini depolamak ve C programa başvurmak için kullanılabilecek bir tamsayı geri almak için luaL_ref işlevini kullanabilirsiniz:

// Assumes that the function you want to store is on the top of stack L 
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);