lua中表键周围的方括号的功能是什么?
我偶然发现一些表的键周围有方括号:lua中表键周围的方括号的功能是什么?,lua,lua-table,Lua,Lua Table,我偶然发现一些表的键周围有方括号: local commands_json = { ["request"] = { ["application"] = PW_APPLICATION, ["push_token"] = deviceToken } } 方括号可以省略吗?不能省略方括号 > x = { 'a' = 1 } stdin:1: '}' expected near '='
local commands_json =
{
["request"] = {
["application"] = PW_APPLICATION,
["push_token"] = deviceToken
}
}
方括号可以省略吗?不能省略方括号
> x = { 'a' = 1 }
stdin:1: '}' expected near '='
> x = { ['-'] = 1 }
> print(x['-'])
1
正确的代码是
> x = { ['a'] = 1 }
> print(x['a'])
1
或
然而,第二种方法也有其局限性。如果您想要一个名为“-”的键,该怎么办
同样,正确的方法是使用括号
> x = { 'a' = 1 }
stdin:1: '}' expected near '='
> x = { ['-'] = 1 }
> print(x['-'])
1
或者您想创建一个名字段,该字段包含在名为a
的变量中
> a = 'cat'
> x = { [a] = 1 }
> print(x['cat'])
1
括号用作键创建的一般形式,它使您能够将任何可哈希对象作为键,而不仅仅是字符串。它只是在表中指定键的长形式。您可以将任何值置于
[]
之间(除了nil
和浮点NaN)。而如果没有它们,则只能使用标识符
例如:
tbl =
{
key name = 5,
}
这是一个编译错误,因为“key name”不是标识符(由于空格)。这项工作:
tbl =
{
["key name"] = 5,
}
这是:
tbl =
{
"key name" = 5,
}
也是一个编译错误。如果Lua看到这样一个裸值,它会认为您正试图添加到表的数组部分。也就是说,它混淆了:
tbl =
{
"key name",
}
它创建一个1元素数组,其中tbl[1]
等于“key name”
。通过使用[]
,编译器可以很容易地判断出您想要的是一个键,而不是数组元素的值
长表单还允许您区分:
local name = "a name";
tbl =
{
["name"] = 5,
[name] = 7,
}
第二部分的意思是计算表达式
name
,其结果将是键。所以这个表有键“name”和“a name”。如果你有一个表有一个像[“key name”]这样的奇数键。。。那么在那一点上,你就不能再使用点符号来检索值了?你必须去桌上[“键名”]?是的,没错。然而,这不是一个“奇怪的关键”。对于拟模拟结构的表,
符号对于易于使用非常重要。对于更像关联数据数组的表,符号是不相关的。只是吹毛求疵,但nil不是唯一不可用的索引。@warspyking:lua5.1只例外nil
;5.2+将浮点NaN添加到该列表中,原因显而易见。@Nicol我认为值得一提NaN。而且我似乎也不能在5.1中使用NaN:也许文档中说的最好:。换句话说,键值是在运行时确定的。