加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

异常 – Lua – “尝试将数字与nil进行比较”错误

发布时间:2020-12-15 00:16:50 所属栏目:大数据 来源:网络整理
导读:a={51,31,4,22,23,45,43,54,11,34}colors={"white","white","white"}function try(f,catch_f) local status,exception = pcall(f) if not status then catch_f(exception) endendfunction refreshColors(yellowEndIndex,redIndex,blueIndex) for ccnt=1,tabl
a={51,31,4,22,23,45,43,54,11,34}
colors={"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()函数时,它会抛出异常并且错误消息是“Error Occured – trial.lua:11:尝试将数字与nil进行比较”.尽管在refreshColors()函数中没有这样的比较,为什么会发生异常?

解决方法

错误在第11行,这意味着:
if ccnt < yellowEndIndex then

你有一个数字的比较.我们知道ccnt是一个数字(它在循环开始时初始化),所以yellowEndIndex必须是nil. 1<零是无稽之谈,所以这是一个错误. 由于错误消息以“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),2,3);

将1,2和3作为参数传递给refreshColours.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读