为什么我的lua'班级'报告尝试索引全局对象错误?

时间:2012-08-28 14:15:25

标签: lua

以下代码位于名为object.lua的文件中:

function object:new()
  local instance = {}
  setmetatable(instance, self)
  self.__index = self
  return instance
end

在主文件中我有:

local object = require("object")
local obj = object:new()

报告的错误是: lua ./object.lua:1:尝试索引全局'对象'(零值)

第1行是'function object:new()'

的第一行

主要是第一行(有要求)。

代码创建自: http://www.lua.org/pil/16.1.html

编辑:

请看这个页面: http://www.coronalabs.com/blog/2011/09/29/tutorial-modular-classes-in-corona/

然后搜索'james'这将是第一条评论帖,你可以看到我正在尝试做什么。

2 个答案:

答案 0 :(得分:1)

这对我有用:

main.lua

require("object")
local obj = object:new()

object.lua

object = {}

function object:new()
    local instance = {}
    setmetatable(instance, self)
    self.__index = self
    return instance
end

你在object.lua中声明一个全局“对象”,而不是返回它,所以你只需要做require("object")

答案 1 :(得分:1)

这里的问题是当运行object.lua中的代码并尝试创建对象时:新函数没有对象表来创建它。

Dogbert的解决方案在该对象中工作正常.lua在使用之前创建了对象表。但是,它是通过显式创建一个全局然后期望的调用者找到哪个不是最佳解决方案来实现的。 Nicol Bolas提供的修正解决方案......在object.lua中创建本地对象并返回它是对这类任务更普遍认同的模式。