对于使用CoronaSDK的游戏,我试图在Lua中实现一些OOP。
如果我在Corona模拟器中运行以下代码:
-- Terrain Sprites base
local TerrBase = {}
local TerrBase_mt = {_index = TerrBase}
function TerrGrass_mt.baseAdd(a,b)
print(a+b)
end
-- Terrain Sprites - Grass
local TerrGrass = {}
function TerrGrass.new()
local grass = {}
setmetatable(grass,TerrBase_mt)
return grass
end
function TerrGrass.add(a,b)
print(a+b)
end
function TerrGrass.sub(a,b)
print(a-b)
end
function TerrGrass.mul(a,b)
print(a*b)
end
function TerrGrass.div(a,b)
print(a/b)
end
--
local grass = TerrGrass.new()
grass.add(5,7)
我收到此消息:
此错误的原因是什么?
local TerrBase = {}
local TerrBase_mt = {_index = TerrBase}
function TerrGrass_mt.baseAdd(a,b) -- <---- ERROR
print(a+b)
end
您正在尝试索引名为的表TerrGrass_mt
。但是您定义的表名为TerrBase_mt
。
TerrGrass_mt
是一个nil
值,因此是错误。
让我们看一下错误消息:
main.lua 12:尝试索引全局'TerrGrass_mt'(nil值)。
这告诉您该错误发生在文件main.lua的第12行中。
您试图.
在名为TerrGrass_mt的全局索引(使用索引运算符)。这告诉您问题是TerrGrass_mt.
,TerrGrass_mt
并且为零。
就像是
function a(b) c = b.d end
a()
会给您一个索引本地nil值的错误,b
因为这里b的范围是本地的。
每当以任何方式使用nil值时出现错误时,都必须找出为什么该值为nil并进行修复或在某些情况下将其替换为默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句