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
相关产品推荐
相关产品推荐

