在 Lua 表中强制转换一个值,而不是链接。

我简化了我的代码,这样你可以更好地理解它:

x = {}
x["foo"]=1
a = {}
a[1]=x
x["foo"]=2
a[2]=x
print(a[1]["foo"])
print(a[2]["foo"])

结果是:

2
2

或者我预期的结果是:

1
2

我理解a[1]是定向到x["foo"]的表地址。所以,当我更改此表的值时,变量a[1]指向新的值。

如何告诉Lua我想要分配值而不是链接到地址?

还有一件事:如果x是一个“简单”变量而不是一个数组,那么值就传递了:

y = {}
x = 1
a = {}
a[1] = x
x = 2
a[2] = x
print(a[1])
print(a[2])

结果为

1
2
点赞
用户107090
用户107090

Lua 手册第二章第一节倒数第二段 描述如下:

表、函数、线程和(完整的)用户数据值都是对象:变量实际上并不包含这些值,而只是对它们的引用。赋值、参数传递和函数返回总是操作对这些值的引用;这些操作并不意味着进行任何形式的复制。

2015-09-17 16:08:29