Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/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
Oop 错误的参数#2到';可设置图元';(零或预期的表格)?_Oop_Lua_Coronasdk - Fatal编程技术网

Oop 错误的参数#2到';可设置图元';(零或预期的表格)?

Oop 错误的参数#2到';可设置图元';(零或预期的表格)?,oop,lua,coronasdk,Oop,Lua,Coronasdk,目前,我正在开发一款corona应用程序 我的文件结构如下: 应用程序->类->对象->船舶 应用程序文件夹中有main.lua、menu.lua、level.lua和Class.lua。在Classes文件夹中有Object.lua。在对象中,ship.lua和最后在Ships中是我的不同船舶,即玩家和敌人 我遵循了,我的代码几乎与他的(bar player和enemys类)完全相同,但仍然在类中收到此错误。lua是 “错误参数#2到‘setetable’(应为nil或table)” 我收到的

目前,我正在开发一款corona应用程序

我的文件结构如下: 应用程序->类->对象->船舶

应用程序文件夹中有main.lua、menu.lua、level.lua和Class.lua。在Classes文件夹中有Object.lua。在对象中,ship.lua和最后在Ships中是我的不同船舶,即玩家和敌人

我遵循了,我的代码几乎与他的(bar player和enemys类)完全相同,但仍然在类中收到此错误。lua是

“错误参数#2到‘setetable’(应为nil或table)”

我收到的错误代码是

函数类(超级)
超级=超级或基本
本地原型=setmetatable({},Super)--此处接收错误
prototype.class=原型
prototype.super=super
原型。索引=原型
返回原型
结束
基=类()
函数库:新的(…)
本地实例=setmetatable({},self)
实例:初始化(…)
返回实例
结束
函数基:initialize()结束
函数库:get()
本地实例=self.Instances
如果(不是实例[1]),则本地obj=self:new()结束
返回表。删除(实例,1)
结束
函数库:dispose()
表.insert(self.Instances,self)
结束
按照上面代码的执行

声明一个函数
Class
,然后调用它(并将其返回值赋给
Base

Base=Class()
行逐步执行
Class

function Class(Super)
该函数接受一个名为
Super

Super = Super or Base
通过使用默认值
Base
,允许
Super
参数为nil/未通过。 此调用
Base=Class()
未传递值,因此此行
Super=Super或Base
Super
作为
nil
,因此计算结果为
Super=nil或Base
,但是全局
Base
也是nil,因为它尚未被分配,所以您得到
Super=nil

local prototype = setmetatable({}, Super)
然后,这一行尝试使用
Super
(从前面的那一行分配),但正如我们刚才看到的那样,
nil
因此是您的错误


你错过了教程中的一点(或者至少在你发布的代码片段中错过了),那就是
函数定义上方的极为重要的

你能澄清为什么会出现错误
(预期为零或表)
当参数
Super
nil
时。当使用
nil
元表调用
setmetatable
时,Lua是否应该删除任何分配的元表并返回该表。。。是的,
nil
应该可以。我想知道你把
Base
分配给了什么。试着把它打印出来
print(type(Super),Super)
就在
setmetatable
行的上方?非常好的建议。可能
Base
是OP没有发布的代码中的某个全局(不是表)。感谢您的回复,@Adam I在类顶部的
local Base
行中添加了该错误@我打印了你建议的,结果是
nil-nil
表格:05F884A8
,然后是
Boolean-true
,因为有几个类继承自这个类。我很高兴你弄明白了这一点,但我认为这个问题可能应该删除。如书面所示,我的回答是错误的,并且问题没有包含足够的信息来诊断问题。您可以在问题中添加有关打印调试和触发打印调试的行的信息,而不是删除,如果您需要,我可以更新我的答案以匹配。
local prototype = setmetatable({}, Super)