如何通过引用赋值Lua变量

如何在 Lua 中通过引用将变量赋值给另一个变量?

例如:想要执行“a = b”相当于a将成为b的指针

背景: 我有一个类似下面这样的情况:

local a,b,c,d,e,f,g   -- 许多变量

if answer == 1 then
  -- 使用 a 做些事情
elseif answer == 1 then
  -- 使用 b 做些事情
。
。
。

PS。例如,从下面的例子中可以看出b = a是按值传递的。注意:我使用的是 Corona SDK。

a = 1
b = a
a = 2
print("a / b:", a, b)

-- 输出:a / b:2     1
点赞
用户501459
用户501459

关于您澄清的帖子和示例,Lua 中不存在您想要的引用类型。您想要一个变量引用另一个变量。在 Lua 中,变量只是值的名称。就是这样。

以下代码可行,因为 b = a 使 ab 都引用相同的表值:

a = { value = "Testing 1,2,3" }
b = a

-- b 和 a 现在引用相同的表
print(a.value) -- Testing 1,2,3
print(b.value) -- Testing 1,2,3

a = { value = "Duck" }

-- a 现在引用不同的表,b 不受影响
print(a.value) -- Duck
print(b.value) -- Testing 1,2,3

您可以将 Lua 中的所有变量分配视为通过引用实现。

这在技术上对表、函数、协程和字符串都是正确的。对于数字、布尔值和 nil 来说,这可能也是正确的,因为它们是不可变类型,所以对于您的程序来说,没有区别。

例如:

t = {}
b = true
s = "testing 1,2,3"
f = function() end

t2 = t -- t2 引用相同的表
t2.foo = "Donut"
print(t.foo) -- Donut

s2 = s -- s2 引用与 s 相同的字符串
f2 = f -- f2 引用与 f 相同的函数
b2 = b -- b2 包含 b 的值的副本,但由于它是不可变的,实际没有区别
--等等--

简而言之:这仅对可变类型(在 Lua 中是 userdata 和 table)有实际影响。在这两种情况下,赋值是复制一个引用,而不是一个值(即不是对象的克隆或副本,而是指针赋值)。

2012-06-27 02:16:06
用户798374
用户798374

真实的情况是变量只是值的名称。但是,如果你正在处理表中的键,你可以计算变量名称。这意味着你可以使用键名来执行你的条件逻辑。

myvars = { a=1, b=2, c=3.14 }

function choose(input)
    print(myvars[input])
end

choose('a')
choose('b')
a = 'a'
choose(a)
b = a
choose(b)
a = 'c'
choose(a)
choose(b)

输出:

1
2
1
1
3.14
1
2012-08-03 23:14:35