Calling a Lua function C den itibaren oldukça düz ileri ama bir Lua işlevi daha sonra kullanmak için bir yer var mı? Connect function works in wxLua'a benzer olaylarda kullanmak için C işlevime iletilen kullanıcı tanımlı Lua işlevlerini depolamak istiyorum.Bir Lua işlevi mi saklıyorsunuz?
cevap
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.
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.
Bu işlev zaten var ve Javier'in dediği gibi Lua referans tablosu. örneğin - –
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. –
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);
- 1. Ansible: Komutun stdout'unu yeni değişkende mi saklıyorsunuz?
- 2. Bir c işlevi çağrıldığında lua komutunu alın
- 3. Veritabanı bağlantılarınızı nerede saklıyorsunuz?
- 4. Arama torch7 (Lua) işlevi python'dan mı?
- 5. Lua
- 6. Değişkenleri jinja'da nerede saklıyorsunuz?
- 7. Lua
- 8. Lua
- 9. SQL Sorgularını bir Yapılandırma dosyasında mı saklıyorsunuz?
- 10. Lua - initialize
- 11. C++ 'da Lua Tablosunu nasıl oluşturabilirim ve bir Lua işlevine nasıl geçirebilirim?
- 12. Android tercih tuşlarını nerede saklıyorsunuz?
- 13. Selen'de bir enum'u Lua
- 14. Lua tarafından bir C++ DLL yüklenebilir oluşturma
- 15. Aynı denetleyicide başka bir işlevi mi çağırıyorsunuz?
- 16. Farklı komutlarda bir bash işlevi kullanılabilir mi?
- 17. Tipcript bir işlevi dışa aktarabilir mi?
- 18. 'Luo' ifadeleri için Lua bayt kodu geriye doğru atlayabilir mi?
- 19. Çağrı lua fonksiyonu
- 20. lua durum kümemi nasıl temizlerim?
- 21. MD5 Karma işlevi excel'de mi?
- 22. FoldLeft işlevi R'de kullanılabilir mi?
- 23. Trap işlevi argümanları ileterek mi?
- 24. gerçekten emin değildi lua
- 25. Lua, virgülle
- 26. Lua - JSON
- 27. Ayar C özelliklerinden Lua
- 28. Arama motorlarını metin reklamları endekslemekten nasıl saklıyorsunuz?
- 29. Do Lua değişkenleri, komut dosyası çağrıları arasındaki değerlerini kaybeder mi?
- 30. Bir bağlantıyı tıkladıktan sonra önceki web sayfanızdaki içeriği nasıl saklıyorsunuz?
Lua ref çok iyidir - Bu özelliği bilmeden Lua'yı tüm bu zaman boyunca kullandığımı düşünemiyorum. Teşekkürler! –