2015-09-05 37 views
1

比方說,我有以下代碼:決策變量時自己更新以前的變量賦值改變

local a = "first text" 
local b = a 
print(a) -- prints "first text" 
print(b) -- prints "first text" 



local c = "second text" 
a = c 
print(a) -- prints "second text" 
print(b) -- prints "first text" 

所以,如果我指定變量「a」是變量「c」,變量「b」是未更新。

我需要在更新「a」時使變量「b」自我更新。 (在這種情況下,使「b」也具有變量「c」的值)。

有沒有辦法做到這一點?

更新:上面的代碼只是一個簡化。在我的真實場景中,變量是表(不是字符串)。

+2

我很確定你的目標不只是「更新變量」。你能描述一下你的程序需要哪些結果 - 可能有更好的方法。 –

+0

嗨奧列格。你是對的。上面的代碼示例只是簡化問題,使問題更易於理解。在我的代碼中,有一個表變量DD指向另一個表變量EE。然後我將EE分配給FF(這也是一張表)。我的表DD一直指向前EE內存插槽。我想知道Lua是否會提供一種讓DD「自我更新」的方法。我的猜測是它沒有,但是誰知道...... – rsc

回答

1

您誤解了Lua中變量賦值和數據類型的工作原理。

只是表&用戶數據存儲爲引用,其他一切都作爲值(包括字符串)存儲。 a被複制並存儲爲bc被複制並存儲爲a

你可以把你的字符串放在一個表中作爲條目,所以這個表是一個包裝器,並作爲C指針。

您可以進一步使用類似OO的編程與metatables

+0

謝謝你的回答Youka,但我不知道你是否明白我真正想要的。上面的例子簡化了我需要的東西。我有A指向B,然後我讓B指向C,我希望A自動指向C(並保持指向B)。我知道存儲非表的變量不是引用,但即使使用表變量也不起作用(這是我嘗試的第一件事)。我也已經閱讀metatables,它不適用。不過謝謝。 – rsc