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!

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top