1

以下代码位于名为 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:尝试索引全局'object'(一个nil值)

第 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/

然后搜索“詹姆斯”,这将是第一个评论帖子,你可以看到我正在尝试做什么。

4

2 回答 2

1

这里的问题是,当 object.lua 中的代码运行并且您尝试创建 object:new 函数时,没有可以在其中创建它的对象表。

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

于 2013-11-04T13:58:56.687 回答
1

这对我有用:

主程序.lua

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

对象.lua

object = {}

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

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

于 2012-08-28T14:21:25.453 回答