ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
1042676 Топик полностью
lloyd (07.10.2020 19:22, просмотров: 318) ответил fk0 на Прототипная модель -- это CRTP что ли, если в терминах C++?
Глянул википедию, что-то сложна. Прототипная модель в Lua - это когда у объекта не находится метода или поля, он ищет ее в метатаблице. Эти метатаблицы можно соединять в иерархию наследования. Но сами "методы" класса работают с фактическим объектом, а не его метаипостасями, поэтому методы вызываются у реализации, а не у этого класса. 
--- Как бы класс-родитель
local A = {}
A.__index = A

function A:methodA()
   self:methodB() -- при вызове из класса B будет вызван метод класса B, а не класса A
end

function A:methodB()
  print('A:methodB')
end

--- Как бы класс-потомок
local B = setmetatable({}, A)
B.__index = B

function B:methodB()
   print('B:methodB')
end

local a_inst = setmetatable({}, A)
local b_inst = setmetatable({}, B)

a_inst:methodA() -- 'A:methodB'
b_inst:methodA() -- 'B:methodB'

Та модель, которая у классов С++, стала бы вызывать A:methodA каждый раз, до тех пор, пока явно не приведешь this к дочернему типу.