2014-01-17 28 views
0

我在維護別人的Lua代碼,而Lua不是我的首選語言。這可能是一個完整的noob問題,但我似乎無法找到在谷歌或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是有條目的表(呃,我想.blax和Lua中的bla [x]是一樣的,對吧?)r,g, b和a。顯然,我不能對來自桌子的東西進行數學運算?我應該在使用它們之前將所有這些值存儲在本地變量中嗎?這看起來不正確。

編輯:

印刷v.orgColor給table: 0x40390080,我假設意味着它存在且是一個表。奇怪的是,v.orgColor.r給出了另一個表格!這聽起來像是原因。

+0

檢查'v.orgColor'和'curColor'表格,並確保它們實際上有一個'r'鍵。不,'bla.x'和'bla [x]'是不一樣的,但'bla.x'和'bla [「x」]'是。 –

+0

@ColonelThirtyTwo這真的應該是我做的第一件事,不是嗎?我已經用結果更新了問題。 – Schilcote

回答

1

事實證明,vorgColor並非像我推測的那樣,是由主機程序設置的,而是由與代碼示例相同的腳本設置的。有一個API更改使得用於返回四個RGBA值的函數返回一個具有相同值的表;舊代碼將orgColor.r設置爲包含這些值的表,導致該錯誤。

我想這個故事的寓意是你應該始終確保你知道設置你正在使用的變量是什麼。