me gusta mucho la forma en la programación orientada a objetos se describe en la "programación en Lua" 16.1, 16.2:de herencias de metamétodos en Lua
http://www.lua.org/pil/16.1.html
http://www.lua.org/pil/16.2.html
y le gustaría seguir este enfoque. pero me gustaría llevar las cosas un poco más lejos: me gustaría tener una "clase" de base llamada "clase", que debería ser la base de todas las subclases, porque quiero implementar algunos métodos de ayuda allí (como "instanceof", etc. .), pero en esencia debería ser como se describe en el libro:
function class:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
ahora a mi problema:
me gustaría tener un "número" de clase, que hereda de "clase":
number = class:new()
me gustaría definir metametodos para la sobrecarga del operador (__add, __sub, etc.) en esta clase, algo así como:
n1 = number:new()
n2 = number:new()
print(n1 + n2)
funciona. esto no es realmente un problema pero ahora me gustaría tener una clase de tercero "dinero", que hereda de "número":
money = number:new{value=10,currency='EUR'}
i introducir algunas nuevas propiedades aquí y tal.
ahora mi problema es que no consigo que las cosas funcionen, que "el dinero" hereda todos los métodos de "clase" y "número" incluyendo todos metamétodos definidos en "número".
intenté varias cosas como sobreescribir metatablas "nuevas" o modificar pero no pude hacer que las cosas funcionen, sin perder los métodos de "clase" en "dinero" o perder los meta-métodos de "número" en "dinero"
sé que hay muchas implementaciones de clase, pero me gustaría seguir con el enfoque mínimo de lua.
¡cualquier ayuda sería muy apreciada!
muchas gracias!
gracias, funciona! – aurora
Buena solución. Para evitar tener que repetir esto en todas las clases base, creé una 'Clase' toplevel para todos ellos. El truco para hacer que funcione es agregar 'o = Class.new (self)' a sus constructores, en caso de que anulen los constructores. – Ludwik