Lua 如何继承方法?

Lua 如何继承方法?,lua,Lua,我想从“CreateInherited”的“Create”中继承方法“GetName”或其他方法,我想从“CreateInherited”中保存唯一的方法(如“getInheriteName”),但我不知道怎么做 我的测试代码: local MainTbl = {} function MainTbl:Create(name) local tbl = {} tbl.name = name or 'Null' function tbl:GetName()

我想从“CreateInherited”的“Create”中继承方法“GetName”或其他方法,我想从“CreateInherited”中保存唯一的方法(如“getInheriteName”),但我不知道怎么做

我的测试代码:

local MainTbl = {}

function MainTbl:Create(name)
    local tbl = {}
    tbl.name = name or 'Null'
  
    function tbl:GetName()
        return self.name
    end

    setmetatable(tbl, self)
    self.__index = self
    return tbl
end

function MainTbl:CreateInherited(name)
    local tbl = {}
    tbl.name = name or 'Null'

    function tbl:GetInheritName()
        return self.name
    end

    setmetatable(tbl, self)
    self.__index = self
    return tbl
end

local Man = MainTbl:Create('Man')
local Woman = MainTbl:CreateInherited('Woman')

print(Man:GetName())
print(Woman:GetName())
print(Woman:GetInheritName())

如果我理解你的意思,你试图把两个不同的构造函数放到一个类中。请注意,
Create
完成了
CreateInherited
需要完成的大部分工作,因此您可以通过调用
Create
inside
CreateInherited
来保存大量重复的代码。您可以从
Create
的完全格式实例开始,并向其中添加方法,而不是从空表开始

function MainTbl:CreateInherited(name)
    local tbl = self:Create(name)

    function tbl:GetInheritName()
        return self.name
    end

    return tbl
end

如果我理解你的意思,你试图把两个不同的构造函数放到一个类中。请注意,
Create
完成了
CreateInherited
需要完成的大部分工作,因此您可以通过调用
Create
inside
CreateInherited
来保存大量重复的代码。您可以从
Create
的完全格式实例开始,并向其中添加方法,而不是从空表开始

function MainTbl:CreateInherited(name)
    local tbl = self:Create(name)

    function tbl:GetInheritName()
        return self.name
    end

    return tbl
end

我真的没想过。我真的没想过。