You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中如何实现对象属性与外部变量的同步更新?

Lua中如何让对象属性跟随外部变量自动更新?

我写了一段测试代码,想实现修改外部变量后,对象的对应属性也自动更新,但实际结果和预期不符:

测试代码:

TestVariable = 123

TestObject = 
{
  ['VarToChange'] = TestVariable,
  ['SomethingStatic'] = 789
}

print(TestObject.VarToChange)

TestVariable = 456

print(TestObject.VarToChange)

实际运行输出:

123
123

我原本预期的输出是:

123
456

请问在Lua中能否实现这一需求?具体该如何操作?


解决方案

这是因为Lua中基本类型(数字、字符串等)是值传递,你给TestObject.VarToChange赋值时,只是把TestVariable当时的数值123复制了一份,两者之后就没有关联了。要实现属性跟随变量更新,可以用两种方式:

方法1:使用函数作为访问器

把VarToChange定义成一个函数,每次访问时返回当前的TestVariable值:

TestVariable = 123

TestObject = 
{
  VarToChange = function() return TestVariable end,
  SomethingStatic = 789
}

print(TestObject.VarToChange()) -- 调用函数获取值

TestVariable = 456

print(TestObject.VarToChange())

运行这段代码就能得到预期输出:

123
456

方法2:用table包装变量

因为Lua中的table是引用类型,把TestVariable放在table里,对象属性引用这个table,修改table里的值时,对象访问到的就是最新值:

TestVariable = { value = 123 }

TestObject = 
{
  VarToChange = TestVariable,
  SomethingStatic = 789
}

print(TestObject.VarToChange.value)

TestVariable.value = 456

print(TestObject.VarToChange.value)

这段代码的输出同样符合预期:

123
456

内容的提问来源于stack exchange,提问作者Siyual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:33:13