2015-09-05 39 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