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)
end
S
function extended(Child, Parent)
setmetatable(Child,{__index = Parent})
end
function extended(Child, Parent)
setmetatable(Child, Parent)
end
A
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) --> 20
S
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