Lua 尝试索引全局 nil 值时出错
Lua error attempt to index global nil value
对于使用 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
的 table。但是你定义的table被命名为TerrBase_mt
.
TerrGrass_mt
是一个 nil
值,因此是错误。
我们来看看错误信息:
main.lua 12: attempt to index global 'TerrGrass_mt' (a nil value).
这告诉您错误发生在文件的第 12 行 main.lua。
您试图对名为 TerrGrass_mt 的全局索引(使用索引运算符 .
)。这告诉你问题是 TerrGrass_mt.
而 TerrGrass_mt
是零。
类似
function a(b) c = b.d end
a()
索引本地 nil 值时会出错 b
因为这里 b 的作用域是本地的。
每当您以任何方式使用 nil 值时遇到错误,您都必须找出该值为 nil 的原因并修复它,或者在某些情况下将其替换为默认值。
对于使用 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
的 table。但是你定义的table被命名为TerrBase_mt
.
TerrGrass_mt
是一个 nil
值,因此是错误。
我们来看看错误信息:
main.lua 12: attempt to index global 'TerrGrass_mt' (a nil value).
这告诉您错误发生在文件的第 12 行 main.lua。
您试图对名为 TerrGrass_mt 的全局索引(使用索引运算符 .
)。这告诉你问题是 TerrGrass_mt.
而 TerrGrass_mt
是零。
类似
function a(b) c = b.d end
a()
索引本地 nil 值时会出错 b
因为这里 b 的作用域是本地的。
每当您以任何方式使用 nil 值时遇到错误,您都必须找出该值为 nil 的原因并修复它,或者在某些情况下将其替换为默认值。