索引表的正常語法是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