從Lua的參考手冊:https://www.lua.org/manual/5.3/manual.html#3.4.9
表構造器是創建表的表達式。每次評估構造函數時,都會創建一個新表。構造函數可以是 ,用於創建空表或創建表並初始化其字段的某些 。對構造的一般語法
tableconstructor ::= ‘{’ [fieldlist] ‘}’
fieldlist ::= field {fieldsep field} [fieldsep]
field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp
fieldsep ::= ‘,’ | ‘;’
形式[EXP1] = EXP2中的每一個字段添加到新的表中的條目與 鍵EXP1和值EXP2。表單name = exp的字段爲 ,等效於[「name」] = exp。最後,表單exp的字段爲 ,等同於[i] = exp,其中i是連續的整數,從1開始 ,其他格式的字段不影響此計數。
正如你看到類似
method_map = {'idea_one' : party_animal:dance}
是不可能的,因爲它爲表構造無效語法。
替換:with =並移除「'使其成爲有效的表達式。
method_map = {idea_one = party_animal:舞蹈}將避免該錯誤消息
標準輸入:2: '}' 預期(以關閉 '{' 在第1行)鄰近 ':'
但是你會看到關於缺少函數參數的另一個錯誤信息。
這是因爲冒號操作符只對函數調用和定義有效。不適用於您實際想要執行的表格元素索引。
method_map = {idea_one = party_animal.dance}
不會導致任何錯誤。
當然,你不能通過自己訪問party_animal。
我們該如何做到這一點?調用method_map:dance()
將自引用method_map。
但是,如果我們使用語法糖用冒號運算符, 寫
method_map = {idea_one = function() return party_animal.dance(party_animal) end}
或等值
method_map = {idea_one = function() return party_animal:dance() end}
我們終於得到我們想要的東西。
現在自我將把party_animal如果我們調用method_map:dance()
method_map [1] [2]。 method_map [1]爲零,因此你不能索引method_map [2]。即使method_map [1]是一個表,method_map [1] [2]也是零,你也不能調用nil值。 – Piglet
這是由於我使用錯誤的表格語法? – Matt
@MattDeacalionStevens不,這是因爲您在創建表格時嘗試使用字符串鍵並嘗試使用數字鍵訪問值。 'table [1]'嘗試訪問使用'table [1] = foo'或'table = {foo}'定義的鍵。總之,如果你省略'{}'中的鍵,那麼所有的值將被編號爲從* 1 *開始的數字。 'table = {「a」,「b」,「c」}'將導致'table [1] ==「a」'。 – Green