索引表的正常语法是t[val]
。仅对于字符串键,Lua提供备用语法,其中t.foo
完全等效于t["foo"]
。这纯粹是一种语法上的便利,即所谓的“语法糖”。它不添加功能,它只是给你一个更简单的使用字符串作为命名字段的语法。
有很多串钥匙,这将不工作:
t["hello_world"] => t.hello_world -- works
t["hello world"] => t.hello world -- oops, space in the string
t["5 * 3"] => t.5 * 3 -- oops
t['[10]'] => t.[10] -- oops
基本上,如果字符串键将是一个有效的标识符才有效。
再次,表是通过[]
索引,并且在大多数情况下,你需要使用:只有当你使用一个字符串键这将工作作为一个有效的标识符(无空格
t = {
-- [key] = value
[10] = "ten", -- number key, string value
["print function"] = print, -- string key, function value
["sub table"] = {}, -- string key, table value
[print] = 111, -- function key, number value
["foo"] = 123, -- string key, number value
}
,包含只有单词字符,数字或下划线,并且不以数字开头)可以使用快捷方式语法。对于上表,这将只是'foo':
t = {
-- [key] = value
[10] = "ten", -- number key, string value
["print function"] = print, -- string key, function value
["sub table"] = {}, -- string key, table value
[print] = 111, -- function key, number value
foo = 123, -- string key, number value
}
来源
2010-12-22 23:47:39
Mud
因此,它基本上是一种区分“var的值”和“var value”的句法方式:)感谢您的回答,我认为我现在知道了。我认为我更喜欢Ruby的做事方式(它总是需要完整的密钥,没有快捷方式,但有可识别字符串的快捷方式) – kikito 2010-12-24 03:25:55