Pergunta

Eu implementei uma pequena biblioteca OOP na Lua, e duas coisas completamente certo ainda não são. Eu preciso do seu conselho!

Como chamar super ()?

Eu preciso fazer uma escolha. Os três argumentos que eu preciso para resolver uma chamada para super () são:

  • A classe de onde a chamada está sendo feita (CallerClass)
  • O exemplo a ser passado (self)
  • O nome do método (método)

Eu hesito entre estas três 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()

que uma aparência mais agradável e mais fácil de lembrar ou para você?

Preciso de um símbolo de classe?

Na versão atual, o único conceito é uma tabela chamada Object, que você pode subclasse. Eu tenho uma outra versão onde eu introduzido um símbolo de classe.

Seu uso é para contar casos de classes. Ou seja, :

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

Acho que é muito útil para documentar e reforçar que um método deve ser chamado a partir de uma classe, iniciando o método com:

assert(self:isKindOf(Class))

É útil na Lua? O que você acha? Obrigado!

Foi útil?

Solução

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

Outras dicas

Eu diria que tem um objeto de classe - mais info / metadados é melhor

Graças Chris, feito.

Para os interessados, o código é publicado sobre os usuários Lua Wiki, consulte ObjectLua .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top