local cls = {base = "base"}
local ins = {}
cls.__index = cls
setmetatable(ins, cls)
Какова временная сложность доступа к ins.base
?
local cls = {base = "base"}
local ins = {}
cls.__index = cls
setmetatable(ins, cls)
Какова временная сложность доступа к ins.base
?
Вы можете ожидать O(1)
временной сложности от официальной реализации Lua.
Код для __index
примерно эквивалентен этому коду Lua, взятому из руководства:
function gettable_event (table, key)
local h
if type(table) == "table" then
local v = rawget(table, key)
if v ~= nil then return v end
h = metatable(table).__index
if h == nil then return nil end
else
h = metatable(table).__index
if h == nil then
error(···)
end
end
if type(h) == "function" then
return (h(table, key)) -- call the handler
else return h[key] -- or repeat operation on it
end
end
Сам поиск __index
не имеет циклов, и, поскольку таблицы Lua поддерживаются хэш-таблицами, поиск в таблицах обычно является операцией с постоянным временем.
cls.base
. Вы просто добавляете несколько поисков по хешу. Сложность по времени для поиска хэша в лучшем O (1) в худшем случае O (n) - person moteus   schedule 24.04.2014