为什么我的lua';类别';是否报告尝试索引全局对象错误?
以下代码位于名为object.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
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你能提供一个代码示例吗?这不是违背了课堂的观点吗?我知道如何用不同的方式实例化一个类,但推荐使用这种方式是为了避免创建全局声明。为什么你不能在这篇文章中这样说呢?我们不应该只看其他网站就知道你真正想要什么。抱歉,当时我认为这不是问题。