Lua错误尝试索引全局nil值

Locohost

对于使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试索引全局“矩形”(nil值)错误

尝试索引全局“应用程序”(nil值)错误

Splash API / lua错误:尝试索引本地元素(nil值)

尝试索引全局“ cv”(nil值)

尝试索引全局“事件”(nil值)

LUA尝试索引全局零值

尝试索引全局“消息”(一个 nil 值)Lua 消息脚本

错误main.lua:45:尝试调用全局'distanceFormula'(nil值)

Lua麻烦:尝试调用全局“解压”(nil值)

Lua:尝试调用全局“ rectangle_draw”(nil值)

如何修复:尝试索引全局“f”(一个 nil 值),LUA I/O 文本编辑

电晕:尝试索引全局“自我”(nil值)

尝试在 roblox (lua) 中使用“名称”错误索引 nil

错误:“试图索引全局'自我'(nil值)

尝试调用全局“ this”(nil值)

lua错误:尝试调用nil值(字段'getn')

LUA错误:尝试索引零值@ 6:16

Lua-util_server.lua:440尝试索引本地'self'(nil值)

尝试用“值”索引 nil

“试图索引全局'ngx'(一个nil值)” LUA问题

添加到 sceneGroup - 尝试索引全局“self”(一个 nil 值)

尝试串联全局“ sceneName”(nil值)

lua尝试调用方法“ len”(nil值)

错误main.lua:138:尝试调用方法“ checkCollision”(nil值)

LUA嵌入C ++ socket.http中[错误:尝试调用nil值]

尝试使用“findFirstChild”错误索引 nil

Roblox 错误,“尝试使用 `GetRankInGroup` 索引 nil”

尝试索引本地“ myMap”(nil值)

lua:尝试索引字段“?” (零值)