【问题标题】:Lua key conflict with array indexLua 键与数组索引冲突
【发布时间】:2020-12-27 22:56:50
【问题描述】:

我是新手二lua。最近学习了lua中的Table。

在我看来(我不确定是否正确), table 可以用作 Array 也可以用作 Map。当用作 Map 时,没有键的值会自动获取序数索引。

t1 = {"a", "b"}
t2 = {"a", [2] = "b"}

tX[1] == "a" 和 tX[2] == "b" 对 t1 和 t2 都是正确的,其中 X 是 1 或 2。

当自动分配的索引和命名键发生冲突时会让人感到困惑,这是

t3 = {"a", [1] = "b"}

在这种情况下 t3[1] == "a" 和 t3[2] == nil。并且没有出现警告或错误。

我猜“b”可能会覆盖索引 1 中的“a”,但事实并非如此。 那么这种情况的原理是什么?

Lua 保持了 TABLE 结构的灵活性。尽管这为 table 提供了更多的可能性和能力,但它也带来了一些混乱。 这种设计的主要概念是什么?

【问题讨论】:

  • 键冲突时的行为取决于实现,没有任何保证。

标签: lua


【解决方案1】:

参考参考手册:3.4.9 - Table Constructors;你有兴趣:

exp 形式的字段等价于[i] = exp,其中i 是从1 开始的连续整数;其他格式的字段不影响此计数。

和:

构造函数中的赋值顺序未定义。 (此顺序仅在有重复键时才相关。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 2018-06-02
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多