【问题标题】:Lua: Why is my table not finding the method from the MetaTable?Lua:为什么我的表没有从 MetaTable 中找到方法?
【发布时间】:2021-08-06 22:42:17
【问题描述】:

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

lua: test.lua:22: attempt to call a nil value (method 'sayHi')
stack traceback:
        test.lua:22: in main chunk
        [C]: in ?

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

Person = {}

Person.Name = "No name inputted"

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

function Person:sayHi()
    print(self.Name .. " says hi")
end


firstPerson = Person:new("Michael")
secondPerson = Person:new("Julian")

print(firstPerson.Name)
secondPerson:sayHi()


【问题讨论】:

    标签: object inheritance lua


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多