gpt4 book ai didi

Lua 错误尝试索引全局 nil 值

转载 作者:行者123 更新时间:2023-12-05 05:11:26 24 4
gpt4 key购买 nike

对于使用 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)

我收到这条消息:

enter image description here

这个错误的原因是什么?

最佳答案

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: attempt to index global 'TerrGrass_mt' (a nil value).

这告诉您错误发生在文件 main.lua 的第 12 行。

您试图对一个名为 TerrGrass_mt 的全局索引(使用索引运算符 .)。这告诉您问题出在 TerrGrass_mt.TerrGrass_mt 为 nil。

有点像

function a(b) c = b.d end
a()

索引本地 nil 值 b 时会出错,因为这里 b 的作用域是本地的。

每当您以任何方式使用 nil 值时遇到错误,您必须找出为什么该值为 nil 并修复它,或者在某些情况下将其替换为默认值。

关于Lua 错误尝试索引全局 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55442045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com