有没有办法在Lua表中使用<const>?

问题描述 投票:0回答:1

从 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}
}
lua lua-table
1个回答
0
投票

const
用于声明局部变量常量,但表不是变量:它们是对象。 Lua 中没有不可变的表。在OP代码中,
x
是一个常量变量,初始化为保存一个表作为其值;无法对
x
进行进一步的分配。
x
保存的值是一个表,并且该对象是可变的。

在Lua中不可能以OP问题中描述的方式使用

const
。可能有一些方法可以使用元表魔法来模拟不可变表,但我怀疑这些方法会带来性能损失,这将首先挫败使用不可变对象的“一个”原因。我会避免这种事情。在某些情况下,在 Lua 中内置不可变表会很方便,但如果你真的认为你需要这个,你可能应该考虑另一种语言是否更适合你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.