Lua创建表时引用同表内已定义元素的实现方法求助
解决Lua表内引用已定义元素的问题
你原来的代码行不通,是因为表还没构造完成时,table变量还是nil,访问table.distance自然会报错。下面给你两种符合要求的方案:
方案1:立即执行函数封装创建逻辑
用匿名函数包裹表的创建过程,先初始化基础字段,再添加依赖字段,最后返回完整的表:
local my_table = (function() local t = { distance = 30.0 } t.last_distance = t.distance - 10.0 return t end)()
这里内部的t是临时变量,不会污染外部作用域,最终得到的表和你想要的结构完全一致,且没有在表外单独定义值。
方案2:利用元表实现动态/静态引用
如果需要last_distance随distance动态更新,可以用元表的__index元方法:
local my_table = setmetatable({ distance = 30.0 }, { __index = function(t, key) if key == "last_distance" then return t.distance - 10.0 end end })
此时访问my_table.last_distance时,会自动计算当前distance减10的值。如果要让last_distance是固定值,只需要在设置完distance后手动赋值一次,本质和方案1类似,但元表方式适合需要动态关联的场景。
注意:不要用table作为变量名,它是Lua的内置库名,容易引发冲突。
内容的提问来源于stack exchange,提问作者COOL
相关产品推荐
相关产品推荐

