LUA 错误尝试比较数字和 nil

需要代码帮助生成大量的错误:

function()
    local restedxp = GetXPExhaustion()
    local totalXP =  UnitXPMax("player")
    local percent = 0
    if restedxp > 0 then percent = floor((restedxp / totalXP)  * 100) end

    local ret = string.format("%s%%", percent)
    return ret
end

错误: 尝试将数字与 nil 比较

点赞
用户2858170
用户2858170

比较数字和 nil 没有意义。因此出现了错误。

在你的情况下,在提供的代码中只有一个比较,即任何使用关系运算符的表达式。

你通常要做的是找出哪个值是 nil,然后修复原因,如果你无法避免该值为 nil,确保只有在不为 nil 时才进行比较。

在你的情况下,这很简单。你进入出现错误信息的行号。你找到唯一的条件表达式 restedxp > 0,由于 0 显然是一个数字,因此必须是 restedxpnil

你找出了 restedxp 在比较前分配的最后一个值的位置,如下所示:

local restedxp = GetXPExhaustion()

因此 GetXPEhaustion() 返回 nil!如果你可以访问该函数,你可能能够修复它或至少找出你是否可以做些什么,以使其不返回 nil

如果不能,你要么将默认值分配给 restedxp,例如 0

local restedxp = GetXPExhaustion() or 0

要么避免使用条件语句比较值。

if type(restedxp) == "number" and restedxp > 0 then
  percent = restedXp // totalXP * 100
end

如果你知道 restedxp 是数字或 nil,则同样适用。

if restedxp and restedxp > 0 then
  percent = restedXp // totalXP * 100
end

对于 totalXP 也是如此。在除法之前,请确保其不是 0

顺便说一下,你的字符串格式不正确。

percent 是一个数字,所以你应该使用 %d 而不是 %s,因为 %s 指的是字符串。它会起作用,因为 Lua 会将你的数字转换为字符串,但这并不是很清洁。

https://www.lua.org/manual/5.3/manual.html#pdf-string.format

选项 s 期望一个字符串,如果其参数不是字符串,则按照 tostring 的相同规则进行转换。如果选项具有任何修饰符(标志,宽度,长度),则字符串参数不应包含嵌入的零。

2020-12-08 16:54:32