Мне очень нравится, как объектно-ориентированное программирование описано в "Программирование на языке lua" 16.1, 16.2:
http://www.lua.org/pil/16.1.html
http://www.lua.org/pil/16.2.html
и хотелось быследовать этому подходу.но я хотел бы пойти немного дальше: я хотел бы иметь базовый «класс» под названием «класс», который должен быть основой всех подклассов, потому что я хочу реализовать там некоторые вспомогательные методы (например, «instanceof» и т. д.).), но по сути это должно быть так, как описано в книге:
function class:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
Теперь к моей проблеме:
Я хотел бы иметь класс "число", который наследуется от "класс"":
number = class:new()
Я хотел бы определить метаметоды для перегрузки операторов (__add, __sub и т. Д.) В этом классе, поэтому что-то вроде:
n1 = number:new()
n2 = number:new()
print(n1 + n2)
работает.это на самом деле не проблема.но теперь я хотел бы иметь третий класс "money", который наследуется от "number":
money = number:new{value=10,currency='EUR'}
я ввожу здесь некоторые новые свойства и тому подобное.
теперь моя проблема в том,что у меня не получается работать, что «деньги» наследуют все методы из «класса» и «числа» , включая все метаметоды, определенные в «числе».
я пробовалнекоторые вещи, такие как перезапись «новых» или модификация метатаблиц, но я не смог заставить вещи работать, не потеряв ни методов «класса» в «деньгах», ни мета-методов «числа» в «деньгах»
Я знаю, что существует множество реализаций классов, но я действительно хотел бы придерживаться минимального подхода самого lua.
любая помощь будет очень признательна!
большое спасибо!