Codea iPad uygulamasıyla çalışıyorum ve Lua'yı öğreniyorum. Codea, sınıflar için Class.lua kullanır. Elde etmeye çalıştığım şey, bir değişken için alma ve ayarlama yöntemleri için işlevler belirtmenin bir yoludur. Şu anda, bir değişkenin "x" ye erişilebildiğini söyleyebiliriz: print (obj.x) ve bunun gibi bir kodla set: obj.x = 1. Bunun yerine değişken için bir get ve set fonksiyonunu çağırmak istiyorum . Actionscript 3'te yazılmış bir şeyi tasvir ediyorum ve A3'in getiri ve işlev bildirimlerini ayarlaması gerekiyor. Mümkünse veya başka bir yolu varsa bana bildirin. Kodunun eklenmesi veya değiştirilmesi bir çözüm ise Codea'nın Class.lua'sını geçersiz kılabilirim. Teşekkürler.Lua alıcıları ve ayarlayıcıları
cevap
Sınıfınızdaki __newindex ve __index yöntemlerini geçersiz kılarak özel bir ayarlayıcı ve getter oluşturabilirsiniz.
Rawset ve rawget yöntemlerini etkinleştirmek için Codea'nın bir parçası olan LuaSandbox.lua'yı değiştirmeniz gerekeceğini unutmayın (bunları sıfırlayan satırları yorumlayın). DÜZENLEME: Bu, Codea'nın en son sürümünde artık geçerli değil, rawset
ve rawget
varsayılan olarak kullanılabilir.
__newindex yöntemi, daha önce ayarlanmamış bir tabloya bir özellik belirlemeyi denediğinizde çağrılır.
Tabloda bulunmayan bir özelliği almaya çalıştığınızda, __index yöntemi çağrılır.
Böylece, sınıfınızda özel bir tablo oluşturarak ve üye değişkenlerinizi orada saklayarak, alıcılar ve ayarlayıcılar için özel kod ekleyebilirsiniz. Onları okumaya ve yazmaya çalıştığınızda, __newindex ve __index yöntemlerinde özel kod çalıştırabilirsiniz.
MyClass = Class()
function MyClass:init()
-- We'll store members in an internal table
self.members = {}
end
function MyClass:__newindex(index, value)
if index == "testMember" then
self.members[index] = value
print("Set member " .. index .. " to " .. value)
else
rawset(self, index, value)
end
end
function MyClass:__index(index)
if index == "testMember" then
print("Getting " .. index)
return self.members[index]
else
return rawget(self, index)
end
end
o
function setup()
foo = MyClass()
foo.testMember = 5
foo.testMember = 2
print(foo.testMember)
end
Burada metamethods hakkında daha fazla bilgi bulabilirsiniz test etmek için: http://lua-users.org/wiki/MetamethodsTutorial
- 1. JavaDoc'ta ayarlayıcıları/alıcıları, özellikleri ve yapıcıları belgelerken belge çoğaltmasından kaçınmanın bir yolu var mı?
- 2. Geter ve ayarlayıcıları grenlerde kullanma veya kullanma?
- 3. CoreData Hızlı ve geçici özellik alıcıları
- 4. Lua
- 5. Lua
- 6. Lua
- 7. lua eşdeğeri __LINE__ ve __FILE__?
- 8. Lua, virgülle
- 9. Kısmi alıcıları mercek kitaplığı kullanarak oluşturma
- 10. Dizinleri belirterek bir ArrayList öğesinden alıcıları alma
- 11. Lua - initialize
- 12. Lua - JSON
- 13. queryBroadcastReceivers registered ile kayıtlı alıcıları bulamıyorReceiver
- 14. Lua'nın baskısı nasıl çalışır ve Lua/Torch
- 15. 2D Lua Oyunları iPhone
- 16. lua/torch içinde,
- 17. Lua, bash betiği yürütmeyecek
- 18. Lua Kodu "tester"
- 19. Ayar C özelliklerinden Lua
- 20. Yol Adı'nı Lua
- 21. Lua yığın ortamı gerektirir
- 22. Selen'de bir enum'u Lua
- 23. Lua os.execute dönüş değeri
- 24. Boş değişkenler Lua
- 25. C++ 'da Lua Tablosunu nasıl oluşturabilirim ve bir Lua işlevine nasıl geçirebilirim?
- 26. gerçekten emin değildi lua
- 27. lua soketi POST
- 28. Özelleştirilebilen Değişkenler Lua
- 29. Lua Dizgiyi değiştirin
- 30. C++ içine yerleştirme Lua
http://nova-fusion.com/2011/04/04/implementing-proper- gettersetters-in-lua/bu sadece bir google uzakta oldu ... – PeterMmm
Ben birkaç kez yukarıdaki bağlantıya baktım. Ayrıca, çözüm olduğunu düşündüm, ama belirli bir değişkenin get ve set fonksiyonlarını nasıl belirleyeceğimi anlayamadım. – Spencer