Domanda

Ho implementato una piccola libreria OOP in Lua e due cose non sono ancora del tutto giuste. Ho bisogno del tuo consiglio!

Come chiamare super ()?

Devo fare una scelta. I tre argomenti di cui ho bisogno per risolvere una chiamata a super () sono:

  • La classe da cui viene effettuata la chiamata (CallerClass)
  • L'istanza da passare (self)
  • Il nome del metodo (metodo)

Esito tra queste tre forme:

--# 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()

Quale ti sembra più bello e o più facile da ricordare per te?

È necessario un simbolo di classe?

Nella versione corrente, l'unico concetto è una tabella denominata Object , che è possibile sottoclassare. Ho un'altra versione in cui ho introdotto un simbolo di classe.

Il suo uso è quello di distinguere le istanze dalle classi. Cioè :

assert(Object:isKindOf(Class))
local object = Object:new()
assert(not object:isKindOf(Class))

Trovo molto utile documentare ed applicare che un metodo deve essere chiamato da una classe, avviando il metodo con:

assert(self:isKindOf(Class))

È utile in Lua? Cosa pensi? Grazie!

È stato utile?

Soluzione

--# Python style, which is nice too:
super(CallerClass, self):method()

Altri suggerimenti

Direi che ha un oggetto di classe: più informazioni / metadati è meglio

Grazie Chris, fatto.

Per coloro che sono interessati, il codice è pubblicato sul Wiki degli utenti Lua, vedere ObjectLua .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top