S
Size: a a a
S
S
S
AY
AY
S
A
self при инициализации, и точкой с elem при вызове.function extended(Child, Parent)
setmetatable(Child,{__index = Parent})
end
function extended(Child, Parent)
setmetatable(Child, Parent)
endS
function extended(Child, Parent)
setmetatable(Child,{__index = Parent})
end
function extended(Child, Parent)
setmetatable(Child, Parent)
endA
A
S
__index есть три таблицы:__index)S
S
S
__index. Если просто задать метатаблицу — поведение оригинальной таблицы не изменится никак, она не начнёт искать ключи в метатаблице.A
setmetatable(Child,{__index = Parent})
я обращаюсь к Child.x, то в начале оно поищет x в Child, если не найдет, то в Parent, а затем в __index, которая в является метатаблицей Parent?S
mt = {}
mt.a = 10
mt.b = 20
tbl = {a = 100}
-- задаём поведение tbl по модели mt
setmetatable(tbl, mt)
------------
-- в mt ничего нет, она не меняет поведение tbl
print(tbl.a) --> 100
print(tbl.b) --> nil
------------
-- теперь в mt есть управляющий ключ,
-- она меняет поведение подчинённых табличек
-- подчинённые теперь ищут недостающее в mt
-- (это может быть и другая таблица)
mt.__index = mt
print(tbl.a) --> 100
print(tbl.b) --> 20S
setmetatable(Child,{__index = Parent})
я обращаюсь к Child.x, то в начале оно поищет x в Child, если не найдет, то в Parent, а затем в __index, которая в является метатаблицей Parent?Child.x. Нашли сразу? Выдали.Child'а поле __index. S
__index.A
Child.x. Нашли сразу? Выдали.Child'а поле __index. setmetatable(Child,{__index = Parent})
через индекс мы не добавляем родительские элементы напрямую, а добавляем их в резерв?S