Вопросы дизайна для библиотеки ООП в Lua

Я реализовал небольшую библиотеку ООП в Lua, и две вещи пока не совсем правильные. Мне нужен твой совет!

Как вызвать super ()?

Мне нужно сделать выбор. Для разрешения вызова super () мне нужны три аргумента:

  • Класс, из которого осуществляется вызов (CallerClass)
  • Экземпляр, который нужно передать (сам)
  • Название метода (метода)

Я колеблюсь между этими тремя формами:

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

Какой из них выглядит лучше и легче запоминается?

Нужен ли мне символ класса?

В текущей версии единственной концепцией является таблица с именем Object, которую можно создать подклассом. У меня есть другая версия, в которой я ввел символ класса.

Его использование состоит в том, чтобы отличать экземпляры от классов. Т.е. :

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

Мне очень удобно задокументировать и обеспечить необходимость вызова метода из класса, запустив его с:

assert(self:isKindOf(Class))

Это полезно в Lua? Что вы думаете? Спасибо!

В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
1
0
868
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
--# Python style, which is nice too:
super(CallerClass, self):method()

Я бы сказал, что у вас есть объект класса - больше информации / метаданных лучше

Спасибо, Крис, готово.

Для заинтересованных, код опубликован в Lua Users Wiki, см. ObjectLua.

Другие вопросы по теме