Preguntas de diseño para una biblioteca OOP en Lua
Pregunta
Implementé una pequeña biblioteca OOP en Lua, y dos cosas aún no están del todo bien. ¡Necesito tu consejo!
¿Cómo llamar a super ()?
Necesito hacer una elección. Los tres argumentos que necesito para resolver una llamada a super () son:
- La clase desde donde se realiza la llamada (CallerClass)
- La instancia que se va a pasar (auto)
- El nombre del método (método)
Dudo entre estas tres formas:
--# Current way:
self:super(CallerClass):method()
--# Variant, which I now find cleaner:
CallerClass:super(self):method()
--# Python style, which is nice too:
super(CallerClass, self):method()
¿Cuál te parece mejor o más fácil de recordar?
¿Necesito un símbolo de clase?
En la versión actual, el único concepto es una tabla llamada Object
, que puede subclasificar. Tengo otra versión donde introduje un símbolo de clase.
Su uso es para contar instancias de clases. Es decir. :
assert(Object:isKindOf(Class))
local object = Object:new()
assert(not object:isKindOf(Class))
Me resulta muy útil documentar y hacer cumplir que un método debe llamarse desde una clase, iniciando el método con:
assert(self:isKindOf(Class))
¿Es útil en Lua? ¿Qué piensas? ¡Gracias!
Solución
--# Python style, which is nice too:
super(CallerClass, self):method()
Otros consejos
Diría que tengo un objeto de clase: más información / metadatos es mejor
Gracias Chris, listo.
Para los interesados, el código se publica en la Wiki de usuarios de Lua, consulte ObjectLua .