【问题标题】:Attempt to perform arithmetic on table value尝试对表值执行算术运算
【发布时间】:2014-02-06 22:22:09
【问题描述】:

我正在维护别人的 Lua 代码,而 Lua 不是我的首选语言。这可能是一个完整的菜鸟问题,但我似乎无法在 Google 或 SO 上找到答案......

以下代码

if !(v.LastHealth == v:Health()) then
    local newColor = {}
    newColor.r = v.orgColor.r - (v.orgColor.r - curColor.r) --This is the line the error occurs on
    newColor.g = v.orgColor.g - (v.orgColor.g * clrPercent)
    newColor.b = v.orgColor.b - (v.orgColor.b * clrPercent)
    newColor.a = v.orgColor.a - (v.orgColor.a - curColor.a)

    v:SetColor( newColor )

产生错误

 attempt to perform arithmetic on field 'r' (a table value)

orgColor(也许,不完全确定——v.orgColor 可能是一个过时的东西)和 curColor 是有条目的表(呃。我认为。bla.x 与 Lua 中的 bla[x] 相同,对吧?) r、g、b 和 a。显然我不能对来自表格的东西进行数学运算?我应该在使用它们之前将所有这些值存储在局部变量中吗?这似乎不对。

编辑:

打印 v.orgColor 给出table: 0x40390080,我认为这意味着它存在并且是一个表格。奇怪的是,v.orgColor.r 给出了另一个表!这听起来像是原因。

【问题讨论】:

  • 检查v.orgColorcurColor 表并确保它们确实有r 键。也不是,bla.xbla[x] 不是一回事,但 bla.xbla["x"] 是。
  • @ColonelThirtyTwo 那真的应该是我做的第一件事,不是吗?我已经用结果更新了问题。

标签: lua runtime-error


【解决方案1】:

事实证明,v.orgColor 并没有像我想象的那样由主机程序设置,而是由与代码示例所在的脚本相同的脚本设置的。有一个 API 更改,使一个用于返回四个 RGBA 值的函数改为返回一个包含这些相同值的表;旧代码将 orgColor.r 设置为包含这些值的表,导致错误。

我想这个故事的寓意是,您应该始终确保您知道设置您正在使用的变量的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多