lua中表键周围的方括号的功能是什么?

时间:2016-01-08 22:58:51

标签: lua corona lua-table

我遇到的表格看起来像这样,用方括号围绕着钥匙。我知道在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
            }
        }

2 个答案:

答案 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

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