我正在维护别人的Lua代码,而Lua不是我的首选语言。这可能是一个完整的noob问题,但我似乎无法在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提供了另一张桌子!这听起来像是原因。
答案 0 :(得分:1)
事实证明,v.orgColor不是,正如我所假设的那样,由宿主程序设置,但是由与代码样本相同的脚本设置。有一个API更改,使得一个函数用于返回四个RGBA值,而不是返回那些相同值的表;旧代码将orgColor.r设置为包含这些值的表,从而导致错误。
我想,故事的道德是,你应该始终确保知道你正在设置的变量是什么。