Lua 中实现类的最有效方式是什么?

通过高效,我指的是性能方面。如果您需要快速访问类成员,例如在绘制 UI 时,最好的索引方式是什么?

我的理解是基于表格的类使用的内存更少,并且在创建实例时速度更快,而基于闭包的类具有更快的函数调用,并且可以让您拥有私有字段,这些字段因为它们作为上值存储而快速索引。针对下面的示例类,什么是最佳实现方式?

-- 基于表格的类示例

local class = {}
class.x = 0
class.y = 0
class.w = 0
class.h = 0

-- Draw 函数将为可能的数十个实例每秒多次调用
function class:Draw()
    draw_rect(self.x, self.y, self.w, self.h)
end
-- 基于闭包的类示例

local function class(_x, _y, _w, _h)
  -- 新实例
  local self = {
    -- 公共字段
    visible = false
  }

  -- 私有字段是本地变量
  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 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(未更改,为私有)

obj.visible = true
print(obj.GetVisible()) -- true(公共)
点赞