Lua:为什么我的表无法从MetaTable找到方法?

在我的示例中,我创建了一个Person类并对成员“Name”设置了默认值。 我有一个构造函数和一个名为sayHi()的函数。每当我尝试调用该函数时,我都会收到以下错误:

lua:test.lua:22:尝试调用空值(方法'sayHi')
stack traceback:
        test.lua:22:在主块中
        [C]:在?

所以从我所理解的内容来看,我正在创建一个新的表,将该表的元表(setmetatable)设置为Person类,然后返回该表,这意味着我应该能够使用其sayHi()函数,但我得到了一个空值。

Person = {}

Person.Name =“未输入名称”

function Person:new(name)
    local o = {} 
    setmetatable(o,self)
    self._index = self 
    return o 

end

function Person:sayHi()
    print(self.Name ..“说hi”) 
end

firstPerson = Person:new(“Michael”)
secondPerson = Person:new(“Julian”)

print(firstPerson.Name)
secondPerson:sayHi()
点赞
用户3124208
用户3124208

在元表上的正确属性名是 __index(两个前导下划线)。您正在分配给 _index(一个前导下划线)。

2021-05-17 16:27:58