从 Lua 5.4 开始,
<const>
语法允许我们设置 const 变量。我注意到这不会间接影响表内的字段。
local x <const> = {
a = {1,2,3},
b = {5,6,7}
}
x = 5 -- error
x.a = 9 -- no error
表
x
是常量,不能重新分配,但表内的字段可以。
有什么方法可以仅通过语法使表中的字段也成为 const 吗?我知道这是可能的通过索引和新索引元方法,但我很好奇是否可以使用像
<const>
这样的简单语法。
我尝试了以下操作,但它产生了语法错误:
local x <const> = {
a <const> = {1,2,3},
b <const> = {5,6,7}
}
const
用于声明局部变量常量,但表不是变量:它们是对象。 Lua 中没有不可变的表。在OP代码中,x
是一个常量变量,初始化为保存一个表作为其值;无法对 x
进行进一步的分配。 x
保存的值是一个表,并且该对象是可变的。
在Lua中不可能以OP问题中描述的方式使用
const
。可能有一些方法可以使用元表魔法来模拟不可变表,但我怀疑这些方法会带来性能损失,这将首先挫败使用不可变对象的“一个”原因。我会避免这种事情。在某些情况下,在 Lua 中内置不可变表会很方便,但如果你真的认为你需要这个,你可能应该考虑另一种语言是否更适合你的问题。