我遇到的表格看起来像这样,用方括号围绕着钥匙。我知道在lua中不需要使用它们。当你使用方括号时有什么区别吗?
local commands_json =
{
["request"] = {
["application"] = PW_APPLICATION,
["push_token"] = deviceToken,
["language"] = "en", --OR: system.getPreference( "ui", "language" ),
["hwid"] = system.getInfo("deviceID"),
["timezone"] = -3600, --offset in seconds
["device_type"] = deviceType
}
}
答案 0 :(得分:3)
它只是在表格中指定键的长形式。您可以在[]
之间添加任何值(除nil
。和浮点NaN之外)。而没有它们,您只能使用标识符。
例如:
tbl =
{
key name = 5,
}
这是一个编译错误,因为"密钥名称"不是标识符(由于空间)。这有效:
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"和"一个名字"。
答案 1 :(得分:1)
您不能省略括号
> 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
括号被用作键创建的一般形式,它们使您能够将任何可清除对象作为键 - 而不仅仅是字符串。