2013-10-31 25 views
6

Ben C içinde güncellemek istediğim birkaç C değerine sahibim ve kendi ciltleme işlevleri yazdım ama bir şeylerin mümkün olup olmadığını bilmek istiyorum.Ayar C özelliklerinden Lua

Bu

myNamespace.myValue = 10 

yapabilmek istiyoruz ve bu

myNamespace.setMyValue(10) 

Olası aynı şeyi yapmak zorunda? Sadece merak ettim. Bir get/set işlevini çağırmak yerine doğrudan bir değer atamak/okumak için daha temizdir. Lua böyle bir otomatik çeviri yapabilir mi?

cevap

7

Bu kesinlikle mümkündür. MyValue'u setMyValue'a çevirmek için __newindex metamethod'unu aşırı yükleyebilir ve daha sonra bunu tablodan çağırabilirsiniz. Bir örnek: "Değer değerini Hello olarak" yazdıracaktır.

Aynı şeyi yapmak için __index'i de yükleyebilirsiniz, ancak getMyValue ile.

+2

OP isteğine göre budur. Neden direkt olarak bilmiyorum '__newindex' yöntemini kullanmak yerine her değişken için setter yazmak ister. – lhf

+2

Bunun çalışması için 'setMyValue'' myNamespace.myValue '' ye değil, özel bir tabloya yazmalıdır. '__index' metamethod bu tablodan okumalıdır. – lhf

+0

Harika! Bunun uzun bir atış olduğunu sanıyordum. Lua her geçen gün daha serinleşiyor, teşekkürler. –