Lua установка индекса в metatable
Я пытаюсь сделать базовое наследование в Lua, и я не совсем понимаю, почему следующее не индексирует таблицу mt.prototype
в моем вызове print()
.
local x = {}
mt = {}
mt.prototype = {
value = 5,
}
mt = {
__index = function (table, key)
return mt.prototype[key]
end,
}
setmetatable(x, mt)
print(x.value)
Он говорит, что mt.prototype
не существует, однако я не понимаю, почему.
1 ответ:
Вы перезаписываете
mt
, на строке 9, Когда вы переназначаете его. Это разрушает полеprototype
.Не усложняйте ситуацию, если это ваша первая попытка с этим материалом. Ваша функция
__index
будет делать то же самое, что и функция leting__index = tbl
.local main_table = {} local proto_table = { value = 5 } setmetatable(main_table, { __index = proto_table }) print(main_table.value)
Если вы хотите немного более сложную настройку, изучите это:
local main_table = {} local meta_table = { prototype = { value = 5 } } meta_table.__index = meta_table.prototype setmetatable(main_table, meta_table) print(main_table.value)
Обратите внимание, что LHS назначения не полностью количественно определяется во время оценки RHS, поэтому
__index
должен быть установлен на отдельной строке.