Lua 类方法

我正在尝试创建 Ball 类并在类中添加一些方法,但我无法找到正确的语法

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

MovingObj = {}

function MovingObj:new(o)
  return o
end

ball = MovingObj:new {}

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

ball:test()

我得到的错误消息是:尝试调用方法'test'(一个 nil 值)

点赞
用户7396148
用户7396148

o 只是一个空表,你没有将元表应用于它,这就不允许你访问 MovingObj 函数。

你可以在 new 函数中使用元表来纠正这个问题:

MovingObj = {}

function MovingObj.new(o)
  o = o or {}

  local meta = {
    __index = MovingObj -- 如果 o 中没有指定索引值,则查找 MovingObj。
  }

  return setmetatable(o, meta) -- 返回应用了新元表的 o。
end

ball = MovingObj.new({type = "ball"})

function MovingObj:test()
  print ("Test! I'm a " .. self.type)
end

ball:test()

此外,在 new 函数中并不需要使用 : 语法,因为我们没有在其中使用 self 变量。

2019-09-23 16:56:15