Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的lua';类别';是否报告尝试索引全局对象错误?_Lua - Fatal编程技术网

为什么我的lua';类别';是否报告尝试索引全局对象错误?

为什么我的lua';类别';是否报告尝试索引全局对象错误?,lua,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:尝试索引全局“obje

以下代码位于名为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()”的第一行

总的来说,这是第一行(带require)

代码创建自:

编辑:

请参阅本页:

然后搜索“james”,这将是第一篇评论文章,你可以看到我正在尝试做什么。

这对我来说很有用:

梅因·卢阿

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中声明一个全局“object”,而不是返回它,因此您只需要执行
require(“object”)

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


Dogbert的解决方案在该对象中运行良好。lua在使用对象表之前创建该对象表。但是,它是通过显式创建一个全局调用,然后期望调用方发现哪个不是最佳解决方案来实现的。Nicol Bolas提供的经修订的解决方案。。。在object.lua中创建一个本地对象并返回它是这类任务更普遍认可的模式。

您还必须返回
object
。你不应该让它在模块中全球化。太好了,非常感谢。Lua是一个令人头疼的OOP背景。@Nicolas你能提供一个代码示例吗?这不是违背了课堂的观点吗?我知道如何用不同的方式实例化一个类,但推荐使用这种方式是为了避免创建全局声明。为什么你不能在这篇文章中这样说呢?我们不应该只看其他网站就知道你真正想要什么。抱歉,当时我认为这不是问题。