【问题标题】:Lua class methodsLua 类方法
【发布时间】:2019-09-24 00:56:15
【问题描述】:

我正在尝试创建 Ball 类并在该类中有一些方法,但我找不到正确的语法

尝试阅读:https://www.lua.org/pil/16.html

MovingObj = {}

function MovingObj:new(o)
  return o
end

ball = MovingObj:new {}

MovingObj.test = function (self)
  print ("Test!")
end

ball:test()

我得到的错误信息:尝试调用方法“test”(一个零值)

【问题讨论】:

    标签: class lua


    【解决方案1】:

    o 只是一个空表,您不要对其应用元表,这将允许访问MovingObj 的功能

    您可以通过在 new 函数期间应用元表来纠正此问题:

    MovingObj = {}
    
    function MovingObj.new(o) 
      o = o or {}
    
      local meta = {
        __index = MovingObj -- when o does not have a given index check MovingObj for that index.
      }
    
      return setmetatable(o, meta) -- return o with the new metatable applied.
    end
    
    ball = MovingObj.new({type = "ball"})
    
    function MovingObj:test()
      print ("Test! I'm a " .. self.type)
    end
    
    ball:test()
    

    这个new函数也没有必要使用:语法,我们没有使用self变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2012-02-15
      • 2013-11-27
      • 1970-01-01
      • 2021-07-29
      相关资源
      最近更新 更多