1
2 -- 學(xué)習(xí)一下表結(jié)構(gòu)的語法
3 function studyTableStruct()
4
5 local testTable = {}; --初始化一個空的(即:該表中沒有任何域)
6 testTable[2] = "是吧";
7 print(testTable[2]); --此處正常輸出。說明就算是添加新字段,字段的索引也未必就一定要按順序從1開始。
8 testTable[1] = "ak47"; --添加一個無名字的新字段,而且它的索引值是為1的。([a]記住:只要字段有索引的概念,則它就沒有名字) 。這邊的 [a]與下面的 [b] 說明很關(guān)鍵
9 print(testTable[1]);
10 testTable.newField = "newfield";--添加一個名字為newField的新字段。([b]記住:只要字段有名字,則它就沒有索引這一概念。)
11 print(testTable.newField);
12 testTable["x"] = "哇塞,這也行?";
13 print(testTable["x"]);
14
15 -- 如果理解了上面的 [a] 與 [b] ,則很容易理解下面的例子
16 local a = {x = 20, y = 0};--這個例子是來自教材上的例子。但是在此本人有做了修改。并親自測試過后,總結(jié)了上面的 [a] 與 [b] 點(diǎn)
17 print(a.x); --輸出:20
18 print(a[1]); --輸出:nil
19 print(a["x"]); --輸出:20
20 --如果將a的結(jié)構(gòu)改成如下:
21 a = nil;
22 a = {x = 20, "agogo", y = 0, "ak47", "mytest"};
23 print(a.x); --輸出:20
24 print(a[1]); --輸出:agogo
25 print(a[2]); --輸出:ak47
26 print(a[3]); --輸出:mytest
27 print(a["x"]); --輸出:20
28 --pritn(a[x]); --這樣會蹦。要么像 a[1]那樣訪問。即:中括號呈的內(nèi)容必須為數(shù)字或者使用雙引號括號起來
29 --[[
30 總結(jié)一下上面的測試?yán)樱?br />31 1) 大括號:{} 是用來定義一個表結(jié)構(gòu)的。所謂的定義,其實(shí)只不過是給表一個初始化的作用。其實(shí)里面的字段域有幾個或怎么初始化,都只是影響到初始化時的狀態(tài)。
32 后面不要時,完全可以隨時將某個字段刪除掉(提示:刪除只需要將該字段賦nil即可。)
33 也完全可以隨時隨地添加一個新的字段。
34 正因?yàn)槿绱遂`活,所以說 {} 僅僅只是影響表的初始化的結(jié)構(gòu)狀態(tài)。
35 2) 表的字段域的訪問有兩種:YourTable.FieldName以及使用中括號 [] 來訪問。
36 a) 如果所訪問的字段不存在。則返回nil
37 b) 使用YourTable.FieldName訪問字段時,則如果表中不存在FieldName這個字段時,返回nil。存在時,返回相應(yīng)的值。像上面的a表中的x與y就可以用這種方式訪問。
38 或者上面的testTable表中的newField或者 x字段就可以這樣子訪問
39 c) 使用中括號 [] 訪問時,如果表中的字段是有名稱的話,則字段必須使用雙引號括號起來。否則訪問不到。并且還會蹦。
40 d) [] 中的內(nèi)容,只能是數(shù)值索引,或者是使用雙引號括號起來的字段的名稱。
41 ]]--
42
43 end
44
45