本文承接上一篇,继续用 Lua 演示如何借助 metatable 的 __index 机制,实现"类"与"对象"的基本模型:通过一个带默认字段的 table 作为类,再用 class:new() 生成继承自该类的对象实例。

示例代码

local class={x=5}
                
                function class:new()--定义创建对象方法
                  o={}--新建一个table
                
                  setmetatable(o,{__index=self})--相当于空继承出一个class的 对象
                  --【【
                  等效于
                  setmetatable(0,self)
                  self.__index=self--self为调用者
                  --】】
                  return o
                end
                
                
                
                local a=class:new()--new 中 self为class
                a.x=6
                print(a.x)
                print(class.x)