gpt4 book ai didi

exception - Lua - "attempt to compare number with nil"错误

转载 作者:行者123 更新时间:2023-12-04 17:37:09 26 4
gpt4 key购买 nike

a={51,31,4,22,23,45,23,43,54,22,11,34}
colors={"white","white","white","white","white","white","white","white","white","white","white","white","white","white","white","white","white"}
function try(f, catch_f)
local status, exception = pcall(f)
if not status then
catch_f(exception)
end
end
function refreshColors(yellowEndIndex,redIndex,blueIndex)
for ccnt=1,table.getn(a),1 do
if ccnt < yellowEndIndex then
colors[ccnt] = "yellow"
elseif ccnt == redIndex then
colors[ccnt] = "red"
elseif ccnt == blueIndex then
colors[ccnt] = "blue"
else
colors[ccnt] = "white"
end
end
end
try(refreshColors, function(e)
print("Error Occured - "..e)
end)
refreshColors(1,1,1)
print(colors[1])

当调用 refreshColors() 函数时,它会抛出异常并且错误消息是“发生错误 - trial.lua:11:尝试将数字与 nil 进行比较”。尽管 refreshColors() 函数中没有这样的比较,为什么会发生异常?

最佳答案

错误在第 11 行,这意味着:

if ccnt < yellowEndIndex then

这是你与一个数字的比较。我们知道 ccnt 是一个数字(它在循环开始时被初始化),所以 YellowEndIndex 必须为零。 1 < nil 是无稽之谈,所以这是一个错误。

由于错误消息以“Error Occured -”开头,我们知道它一定来自您的 try 函数错误处理程序。这是有道理的。你打电话:
try(refreshColors, function(e)
print("Error Occured - "..e)
end)

尝试然后调用:
pcall(f)

其中 f 是 refreshColours。这会在没有任何参数的情况下调用 refreshColours,即所有参数都初始化为 nil。当然,使用 nil 值调用 refreshColouts 自然会尝试将 1 (ccnt) 与 nil (yellowEndIndex) 进行比较!

你可能想像这样修改你的 try 函数:
function try(f, catch_f, ...)
local status, exception = pcall(f, unpack(arg))
if not status then
catch_f(exception)
end
end

所以你可以这样称呼它:
try(refreshColours, function(e)
print("Error Occured - "..e)
end), 1, 2, 3);

将 1、2 和 3 作为参数传递给 refreshColours。

关于exception - Lua - "attempt to compare number with nil"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821418/

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