Под эффективностью я подразумеваю производительность.Если вам нужно быстро получить доступ к членам класса, как при рисовании пользовательского интерфейса, каков наилучший способ их индексирования?
Насколько я понимаю, классы на основе таблиц используют меньше памяти и быстрее создают экземпляры, а закрытие -основанные классы имеют более быстрые вызовы функций и позволяют иметь приватные поля, которые быстро индексируются, потому что они хранятся в виде повышенных значений.Какова лучшая реализация для ситуации, подобной приведенному ниже примеру класса?
-- Example of Table-based Class
local class = {}
class.x = 0
class.y = 0
class.w = 0
class.h = 0
-- Draw would be called for potentially dozens of instances many times per second
function class:Draw()
draw_rect(self.x, self.y, self.w, self.h)
end
-- Example of Closure-based class
local function class(_x, _y, _w, _h)
-- the new instance
local self = {
-- public fields
visible = false
}
-- private fields are locals
local x, y, w, h = _x, _y, _w, _h
function self.SetPos(_x, _y)
x = _x
y = _y
end
function self.GetPos()
return x, y
end
function self.GetVisible()
return self.visible
end
-- return the instance
return self
end
local obj = class(10, 20, 40, 80)
print(obj.GetPos()) --> 10, 20
obj.SetPos(50, 100)
print(obj.GetPos()) --> 50, 100
obj.x = 21
obj.y = 42
print(obj.GetPos()) --> 50, 100 (unchanged, private)
obj.visible = true
print(obj.GetVisible()) -- true (public)