【Lua运用】实现面向对象的类

预备知识:

1,元方法、__index (解释)
2,闭包

代码示例:

---- 单继承框架
function class(class_name,base_class)
    local cls = {__name = class_name}
    cls.__index = cls
    local call =   function(...)
        local obj = setmetatable({}, cls)
        --执行构造函数
        if cls.ctor then
          cls.ctor(obj,...)
        end
        return obj
    end
    --重写函数执行,即 实例 = 类名()
    cls =  setmetatable(cls, {__call =call}) 
    --如果存在基类,设置元表
    if base_class then 
        cls.super = base_class
        setmetatable(cls,{__index = base_class,__call =call})
    end
    return cls
end
 
-- 使用
Animal = class("Animal")
function Animal.ctor(self)
end
function Animal.Say(self)
    print(self.__name .. " say")
end

--继承Animal
Person = class("Person",Animal)

local animal = Animal()
local person = Person()
animal:Say() -- animal say
person:Say() -- person say

你可能感兴趣的:(【Lua运用】实现面向对象的类)