lua中表键周围的方括号有什么作用?

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

我遇到了按键周围有方括号的表格:

local commands_json =
{
    ["request"] = {
        ["application"] = PW_APPLICATION,
        ["push_token"] = deviceToken
    }
}

方括号可以省略吗?

lua lua-table
2个回答
23
投票

这只是在表中指定键的长形式。您可以在

[]
之间放置任何值(
nil
除外。以及浮点 NaN)。而没有它们,您只能使用标识符。

例如,这是一个编译错误,因为

key name
不是标识符(由于空格):

tbl =
{
  key name = 5,
}

相比之下,以下示例确实有效:

tbl =
{
  ["key name"] = 5,
}

以下带引号且不带方括号的示例是编译错误:

tbl =
{
  "key name" = 5,
}

如果 Lua 看到这样的裸值,它会认为您正在尝试添加到表的数组部分。也就是说,它混淆了:

tbl =
{
  "key name",
}

这将创建一个 1 元素数组,其中

tbl[1]
等于
"key name"
。通过使用
[]
,编译器可以轻松判断出您想要的东西是键而不是数组元素的值。

长格式还可以让您区分:

local name = "foobar";

tbl =
{
  ["name"] = 5,
  [name] = 7,
}

第二部分意味着计算表达式

name
,其结果将是关键。所以这张桌子有键
"name"
"foobar"


4
投票

不能省略括号

> x = { 'a' = 1 }
stdin:1: '}' expected near '='

正确的代码是

> x = { ['a'] = 1 }
> print(x['a'])
1

> x = { a = 1 }
> print(x['a'])
1

但是,第二种也有其局限性。如果你想要一个名为“-”的键怎么办?

> x = { - = 1 }
stdin:1: unexpected symbol near '='
> x = { '-' = 1 }
stdin:1: '}' expected near '='

正确的方法是使用括号

> x = { ['-'] = 1 }
> print(x['-'])
1

或者您想创建一个包含在名为 a 的变量

中的名称字段?

> a = 'cat' > x = { [a] = 1 } > print(x['cat']) 1

括号用作键创建的一般形式,它们使您能够将任何可哈希对象作为键 - 不仅仅是字符串。

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