Domande di progettazione per una biblioteca OOP a Lua
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!
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 .