Estoy trabajando con la aplicación de Codea para iPad y aprendiendo Lua. Codea usa Class.lua para las clases. Lo que intento lograr es una forma de especificar funciones para un método de obtención y configuración de variables. Actualmente, se puede acceder a una variable que dice "x" como esta: print (obj.x) y se establece con un código como este: obj.x = 1. Me gustaría que la variable llamara a una función get y set que pueda especificar . Estoy portando algo escrito en Actionscript 3 y necesito imitar las declaraciones de funciones get y set de A3. Avíseme si esto es posible o si es de otra manera. Puedo anular Class.lua de Codea si agregar o alterar su código es una solución. Gracias.Lua getters and setters
Respuesta
Puede crear un setter y getter personalizados anulando los métodos __newindex y __index en su clase.
Tenga en cuenta que tendrá que modificar LuaSandbox.lua, que es parte de Codea, para habilitar los métodos de rawset y rawget (comente las líneas definiéndolos en cero). EDITAR: Esto ya no es el caso en la última versión de Codea, rawset
y rawget
están disponibles de forma predeterminada.
Se llama al método __newindex cada vez que intenta establecer una propiedad en la tabla que no se haya establecido anteriormente.
Se llama al método __index cada vez que intenta obtener una propiedad que no existe en la tabla.
Para que pueda insertar un código personalizado para getters y setters creando una tabla privada en su clase y almacenando sus variables miembro allí. Cuando intenta leerlos y escribirlos, puede ejecutar código personalizado en sus métodos __newindex y __index.
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
para probarlo
function setup()
foo = MyClass()
foo.testMember = 5
foo.testMember = 2
print(foo.testMember)
end
Usted puede encontrar más información sobre metamétodos aquí: http://lua-users.org/wiki/MetamethodsTutorial
- 1. Getters and setters en javascript
- 2. The C# Shorthand getters and setters
- 3. Getters/setters en Java
- 4. Symfony2 generadores getters/setters
- 5. Evitar Getters Interna/setters
- 6. Getters y setters para matrices
- 7. Usando getters/setters en Java
- 8. Cómo documentar getters y setters
- 9. ¿Se permiten setters/getters estáticos?
- 10. Javascript getters/setters en IE?
- 11. PHP OOP muchos setters, getters
- 12. ¿Cómo funcionan getters y setters?
- 13. AtomicInteger vs getters/setters sincronizados
- 14. método de prueba junit para getters & setters
- 15. Rendimiento Android - 'Evitar interna getters/setters'
- 16. Objetivo C - Accessors ie Getters/Setters
- 17. Getters/setters de JavaScript y extender objetos
- 18. ¿Cuál es el punto de los getters y setters?
- 19. ¡Benefíciese de getters y setters generados en Play! marco
- 20. java: campos privados `volátiles` con getters y setters
- 21. Getters/setters de una clase con un mapa
- 22. ¿VB.NET admite getters y setters automáticos en las propiedades?
- 23. C++ Getters-Setters en el archivo de implementación
- 24. ¿Debo molestarme con getters y setters en PHP?
- 25. ¿Hay alguna manera de interceptar setters y getters en C#?
- 26. Scala getters y setters en la clase Java
- 27. Buenas prácticas de getters, setters y properties. Java vs. C#
- 28. ¿Cómo generar getters y setters en Visual Studio?
- 29. ¿Por qué declarar privado el método getters y setters?
- 30. ¿Propagación automática de javadoc de campo privado a getters/setters?
http://nova-fusion.com/2011/04/04/implementing-proper- gettersetters-in-lua/que estaba a solo un google de distancia ... – PeterMmm
He visto el enlace de arriba varias veces. También pensé que era la solución, pero no pude entender cómo iba a especificar las funciones de obtención y ajuste de una variable en particular. – Spencer