2016-10-01 24 views
-3

在我的代碼,我的變量設置爲一個表的內容,就像這樣:的Lua奇錶行爲

colorTable = {{255, 255, 255}} 
color = colorTable[1] 

我的問題是,當我編輯的color值它colorTable

改變了原有的價值

所以在開始的時候,colorTable[1][1]等於255,但我跑得在此之後:

color[1] = color[1] - 10 

colorTable[1][1]等於245。 任何幫助表示讚賞。

+1

這並不是一個奇怪的行爲,它的行爲是人們所期望的,如果人們至少會閱讀Lua手冊的「基本概念」一章。 https://www.lua.org/manual/5.3/manual.html#2.1這就像第二頁... 表總是通過引用複製。顏色是指與colorTable [1]完全相同的表格,因此color [1]指colourTable [1] [1]。 – Piglet

+2

要明確,'color [1] = color [1] - 10'不會編輯'color'的值。它只是用鍵號1更新其成員的值.'顏色'根本沒有改變;它是相同的表格引用。 –

回答

5

下面的行創建一個內colorTable參考(color)表中:

color = colorTable[1] 

我們只操縱參考值,其不建議的副本的任何手段。

如果相反,我們嘗試以下操作:

color = {table.unpack(colorTable[1])} 

我們調用構造函數,其值填充它colorTable[1],其中包含255, 255, 255解壓。然後,我們有一個表格保存這些值並執行他們的算術不會影響到那些在colorTable

print(colorTable[1][1]) 

結果:

255 

隨後:

color[1] = color[1] - 10 

print(colorTable[1][1]) 

結果:

255