aardio專用于桌面軟件快速開發(fā),程序提供web.form支持庫(開源),可以方便的創(chuàng)建web窗體加載網(wǎng)頁創(chuàng)建web風(fēng)格的軟件界面或?qū)崿F(xiàn)嵌入瀏覽器應(yīng)用,網(wǎng)頁與aardio代碼可以方便的交互調(diào)用;程序提供了迭代功能,該功能是指循環(huán)取值并不斷近最終目標(biāo)的過程,每次取值的結(jié)果總是作為下一次迭代的初始值,具體到迭代器函數(shù),就是每一次調(diào)用迭代器得到的第一個返回值總會作為下一次調(diào)用迭代器的參數(shù)這個關(guān)鍵的迭代結(jié)果值稱之為控制變量;另外程序提供了web.layout支持庫,封裝了輕量快速的界面引擎HTMLayout,可以使用傳統(tǒng)的HTML,CSS技術(shù),更加方便的實現(xiàn)漂亮的界面,而且運行,響應(yīng)速度極快,開發(fā)工具;程序提供可視化開發(fā)工具,可以比較方便的的通過拖拉控件創(chuàng)建程序;使用標(biāo)準(zhǔn)庫內(nèi)置并開源的plus控件可以方便的實現(xiàn)控件九宮格貼圖、透明貼圖、僅僅通過拖拉設(shè)置就可以快速制作出漂亮的界面;強大又實用
aardio介紹
aardio是專用于桌面軟件快速開發(fā)的新一代混合型編程語言 – 具有動態(tài)語言輕便、靈活的特,而且又可以同時支持靜態(tài)類型開發(fā),象靜態(tài)語言那樣使用。aardio可以直接支持原生DLL,即使是外部EXE進程中的函數(shù),也可以使用一句代碼聲明為普通的aardio函數(shù)對象( 原生call支持 ),aardio支持非常多的標(biāo)準(zhǔn)調(diào)用約定,例如 stdcall,cdecl,thiscall,fastcall,regparm(n) 等調(diào)用約定都可以支持。aardio雖然小,但支持的接口很豐富、可以支持com靜態(tài)動態(tài)雙接口,象VBS一樣原生支持com對象。
aardio軟件功能
全新的混合編程語言開創(chuàng)了一種全新的編程方式,也因為這種語言特,aardio可以非常方便的嵌入各種第三方語言,目前aardio可以嵌入?yún)R編機器碼,C語言,Java,PHP,C#,Python,Javascpt,VBScpt……等等數(shù)量眾多的第三方編程語言,方便的互調(diào)函數(shù),并且這些調(diào)用第三方語言的功能模塊都是使用aardio實現(xiàn)( 開放源碼 )。
aardio可以將硬盤目錄,硬盤文件一鍵嵌入EXE文件,將全部程序包含所有資源生成的綠色EXE文件,aardio制作的程序大多不需要安裝程序,也不需要釋放DLL運行庫,可以方便的制作免安裝綠色軟件。
aardio支持多線程開發(fā),復(fù)雜的多線程開發(fā)在aardio中變得非常簡單,標(biāo)準(zhǔn)庫也提供大量簡化多線程開發(fā)的輔助支持庫,為多線程軟件開發(fā)帶來很大的方便(請參考aardio范例 -> 多線程 )。
aardio的標(biāo)準(zhǔn)庫基本使用純aardio源碼實現(xiàn),并且全部開源,標(biāo)準(zhǔn)庫提供了大量的簡化編程的常用函數(shù),涉及到軟件開發(fā)的方方面面,極大的簡化了桌面軟件開發(fā)過程。
aardio軟件特色
標(biāo)識符
標(biāo)識符是指編程語言中由起標(biāo)識作用的英文字母、數(shù)字或中文字符、以及下劃線組成的命名符號,
一般用來標(biāo)識用戶或系統(tǒng)定義的數(shù)據(jù)或方法,例如常量名、變量名、函數(shù)名等。
標(biāo)識符基本規(guī)則:
標(biāo)識符由英文字母、中文字符、數(shù)字、下劃線“_”三種字符組成。
數(shù)字不允許作為首字符。
變量名包含中文時,中文字符前面不能有字母或數(shù)字。
可以使用美元符號($)作為變量名或變量名的第一個字符。
可以使用下劃線作為變量名或常量名的首字符,當(dāng)下劃線作為首字符時表示常量,單個下劃線表示變量.
標(biāo)識符區(qū)分大小寫
在程序運行過程中,用來存儲數(shù)據(jù)值并且其值能被改變的對象稱為變量。
變量的名稱用字母、數(shù)字、中文字符、下劃線等組成的合法標(biāo)識符來表示。
變量名開始字符不能為數(shù)字。
變量名包含中文時,中文字符前面不能有字母或數(shù)字。
可以使用美元符號($)作為變量名或變量名的第一個字符。
可以使用下劃線作為變量名或常量名的首字符,當(dāng)下劃線作為首字符時表示常量,單個下劃線表示變量.
應(yīng)遵循就近原則(Pnciple of Pximity):在第一次使用局部變量之前定義該變量,以使代碼保持清晰的結(jié)構(gòu)。
aardio安裝說明
1、瀏覽至此,需要的用戶可以點擊本網(wǎng)站提供的下載路徑下載得到對應(yīng)的程序安裝包
2、用戶可以打開應(yīng)用程序數(shù)據(jù)包,雙擊程序數(shù)據(jù)包即可打開程序
3、用戶打開程序后即可開始您的開發(fā)旅途
aardio使用說明
1、成員變量
成員變量是屬于一個名字空間的成員對象。
變量的默認(rèn)名字空間為global名字空間,并可以使用name改變指定代碼塊的名字空間。
可以使用self關(guān)鍵字訪問當(dāng)前名字空間。使用..作符訪問global名字空間
2、局部變量
var聲明一個局部變量,作用域為當(dāng)前塊,以及被當(dāng)前塊所包含的塊。
var聲明的局部變量可以指定一個初始值,也可以不指定,建議對所有變量指定初始值。
例如:
常量
在程序運行過程中,用來存儲數(shù)據(jù)值并且其值不能被改變的對象稱為常量,常量僅可初始化賦值一次,不可以修改其常量的值。
1、字面常量
指以數(shù)值、字符串等字面值表示數(shù)據(jù)的對象。
象123,”abc”這樣的值被稱之為字面值,被稱為字面值是因為他的值就是代碼直接描述的值,并且沒有名字可以稱呼他,只能用他的值來表示。
常量只能賦值一次,重復(fù)賦于相同的數(shù)字或字符串等常量值將會被忽略,賦于不同的值將會拋出錯誤。
aardio中的常量以下劃線作為起始字符的標(biāo)識符來表示。
2、具名常量
用合法的標(biāo)識符來表示不可修改數(shù)據(jù)的對象稱為常量,與字面值不同的是他具有類似變量名的常量名稱。
常量名以下劃線作為首字符,或使用::作符將普通的變量轉(zhuǎn)換為常量。
具名常量可以理解為賦值后不可修改的變量。
2.1 成員常量
用字母、數(shù)字、中文字符、下劃線等組成的標(biāo)識符來表示,并且必須以下劃線作為起始字符。
成員常量與成員變量一樣默認(rèn)創(chuàng)建于當(dāng)前名字空間(self名字空間)、也可以指成員常量的名字空間前綴。
成員常量的長度必須大于1并小于256個字節(jié)(單個下劃線不是常量,在aardio中通常用作匿名變量占位符)
例如:
2.2 全局常量用大寫字母、數(shù)字、下劃線等組成的標(biāo)識符來表示,并且必須以“下劃線+大寫字母”作為起始字符。全局常量類似于成員常量,區(qū)別是必須大寫、并且位于globle根名字空間。實際上使用全局對象是不好的習(xí)慣,你應(yīng)當(dāng)盡可能的避免使用全局對象、將他們放入適當(dāng)?shù)拿挚臻g。不要介意多打幾個字多寫幾個名字空間前綴,理解了全局對象會不知不覺增加程序的復(fù)雜度、并且努力地去避免使用全局對象(這里不是指名字空間、相反應(yīng)當(dāng)更多地使用名字空間來組織數(shù)據(jù)),意謂著你已經(jīng)成為了一名有經(jīng)驗的程序員。
而且全局常量在aardio是運行時對象,意謂著會增加發(fā)布后的程序體積。
把他們改為字面常量并加上注釋是一個不錯的優(yōu)化方案,aardio提供相應(yīng)的工具。
這種優(yōu)化技術(shù)被用于libswin#DEFINE.aardio(這不是一個庫,放在庫目錄下僅僅是為了讓掃描常量聲明到智能提示數(shù)據(jù)庫),效果如下:
2.3 轉(zhuǎn)換全局常量
將一個變量名轉(zhuǎn)換為 global名字空間下的全局常量名 – 并保護該常量在其后加載的代碼中一旦賦為非空值后即不可修改,例如
全局常量需要遵守以下使用規(guī)則:1、全局常量名首字母大寫(以區(qū)別普通變量 )。
aardio默認(rèn)定義了少量全局常量函數(shù)名 – 這些關(guān)鍵函數(shù)全部小寫首字母,但在aardio編輯器中顯示為藍色高亮狀態(tài)。
2、當(dāng)一個變量被定義為全局常量,賦于非空值以后其值即不能再隨意更改 。
全局常量一般使用 ::Name := 初始值 賦值,等價于使用 ::Name = ::Name or 初始值 以避免重復(fù)初始化。
3、::的作用域是根據(jù)代碼的載入順序向下向后的,所以在同一文件中已定義的全局常量名再次使用時可以省略::前綴,但因為代碼文件的載入有不確定 – 在其他文件首次使用該常量名時仍然應(yīng)該使用::定義一次。
下圖顯示了win庫定義的全局常量:
3、使用初始化賦值定義常量
常量是僅能初始化賦值一次,對于數(shù)值常量,重復(fù)賦于相同的值會被自動忽略。
如果常量的值是非數(shù)值對象,即不能保證每次創(chuàng)建的值是相同的,為避免無意中修改常量值導(dǎo)致異常,可使用:=作符賦值。
例如:
上面的代碼等效于
動態(tài)指針并不是一個新的類型 – 而是與普通指針擁有相同的數(shù)據(jù)類型, raw.realloc()函數(shù)可用于分配、釋放一個動態(tài)指針,并且可以使用raw.realloc()再次調(diào)整該指針分配的內(nèi)存大小,動態(tài)指針的地址是可變的,調(diào)整大小后指針變量應(yīng)當(dāng)更新為返回的新指針。
動態(tài)指針可以作為普通指針使用,但是當(dāng)你把動態(tài)指針傳入可以識別此類型指針的raw.realloc() raw.concat() raw.sizeof() 等函數(shù),
aardio可以獲取到一個頭(用于記錄內(nèi)存大小、存儲的數(shù)據(jù)大小),動態(tài)指針會在返回給用戶的指針地址前面倒退8個字節(jié)記錄2個32位字段的內(nèi)存、數(shù)據(jù)長度,總是向后移動8個字節(jié)將可用的指針地址返回給用戶, 并且在內(nèi)存的尾部總是保留2個字節(jié)置0用于兼容C風(fēng)格字符串,
這種指針也可以象普通指針一樣用于API函數(shù)等可以使用指針的地方,可以用raw.sizeof()獲取這種指針指向內(nèi)存的大小,可以使用raw.concat()函數(shù)對這種指針的內(nèi)存追加拼接數(shù)據(jù)。
與緩沖區(qū)不同的是,如果不指定初始化值,raw.realloc就不會對分配的內(nèi)存設(shè)定初始化值,并且aardio不負(fù)責(zé)自動釋放動態(tài)指針分配的內(nèi)存,顯式的調(diào)用 raw.realloc(0,動態(tài)指針) 才能釋放一個動態(tài)指針。
使用 raw.buffer() 函數(shù)分配的一塊可讀寫內(nèi)存的指針,緩沖區(qū)在aardio中可以像字符串一樣作為一個字節(jié)數(shù)組使用,可以用#作符取長度,用[]下標(biāo)作符取字節(jié)值,字符串是常量字節(jié)值是只讀的,但緩沖區(qū)的字節(jié)值不但可讀,也可以寫入,緩沖區(qū)在很多字符串函數(shù)中都可以作為字符串使用,在API函數(shù)中可以作為指針使用。
與動態(tài)指針不同的是,即使你不指定初始值,aardio仍然會初始化所有字節(jié)的值為0,并且你無法動態(tài)調(diào)整緩沖區(qū)的大小,你不必要也沒辦法手動釋放緩沖區(qū)分配的內(nèi)存,只能由aardio自動回收。
計算機中以八個二進制位表示一個八位字節(jié) – 這稱為一個單字節(jié)字符。
一組連續(xù)的字節(jié)就構(gòu)成一個字符串,在aardio中字符串是基于二進制的,可以包含任何數(shù)據(jù)(例如圖像、文本、或者”等不可打印字符)。
字符串本質(zhì)上是字節(jié)構(gòu)成的數(shù)組,但這個數(shù)組是只讀的,每次對字符串做替換、連接等作都會生成新的字符串,
每個字符串指向的內(nèi)存不應(yīng)該被直接修改。
下面的代碼定義了一個最基本的字符串:
可以用 #str 取該字符串占用的內(nèi)存字節(jié)長度,可以使用下標(biāo)獲取每個字節(jié)的數(shù)值,例如 str[1] 取出第一個字節(jié)的數(shù)值是67, 內(nèi)存中的67在文本中顯示出來的就是字符”C” – 這是ASCII編碼規(guī)定的。
前面說過,一個字節(jié)只有8個二進制位,那他能表示的字符就很有限,所以就有了很多不同的編碼規(guī)則用多個字節(jié)來表示更多的字符,例如GBK,UTF-8等多字節(jié)字符集,用小于0x80的單字節(jié)表示ASCII字符(英文字母數(shù)字這些),GBK用雙字節(jié)表示漢字(首字符大于0x80),而UTF8有兩個以上的字節(jié)表示寬字符(所有字節(jié)大于0x7F).GBK編碼的第二個字節(jié)還是會與ASCII沖突,
所以處理GBK字符串需要從頭開始才能準(zhǔn)確的檢測一個字節(jié)屬于誰,這導(dǎo)致容易出現(xiàn)串碼問題,而UTF8的寬字符總是大于0x7F,首字符的兩個二進制位總是1,而附加字節(jié)的前兩個二進制位總是10,這就讓我們處理文本非常方便,因為格式化的文本,例如HTML,ON他的分隔標(biāo)記通常都是固定小于0x7F的ASCII字符,但要注意UTF8的字符是變長的,理論一個字符可以是1,2,3,4 …..個字節(jié)。
不同的編碼還存在不同的系統(tǒng)環(huán)境不兼容的問題,例如GBK的軟件在繁體系統(tǒng)上就會亂碼,而Unicode編碼可以
避免這一問題,Unicode編碼有多種方案,主要被采用的則是UTF-8,UTF-16。 windows系統(tǒng)使用的是UTF-16,
而 aardio 10開始,aardio的源代碼文件、字符串等等默認(rèn)使用UTF-8編碼。
注意在aardio文檔中一般提到Unicode指的是UTF 16.
例如 stng.formUnicode() stng.toUnicode() 函數(shù)默認(rèn)都是從UTF-8到 UTF-16(Unicode)雙向轉(zhuǎn)換。
一、文本字符串
文本字符串放在雙引號中,字符串可以包含換行,aardio保證雙引號中的字符串換行使用”換行符,不包含”回車符。
例如:
如果在雙引號中的字符串本身包含雙引號,可以用兩個連續(xù)的雙引號表示雙引號自身。另外在 aardio 10中,可以使用反引號(鍵盤左上角ESC下方的鍵)代替雙引號,他們的作用與用法相同,
、
例如:
aardio代碼中雙引號、反引號內(nèi)的都是純文本字符串,并被aardio標(biāo)記為UTF-8編碼。
aardio中每個字符串都有一個UTF格式標(biāo)記,可以使用 stng.getUtf() , stng.setUtf() 函數(shù)獲取或修改UTF標(biāo)記。
UTF標(biāo)記是按位設(shè)置的,utf & 8 表示一個UTF8編碼的字符串,utf & 16表示一個UTF16編碼的Unicode字符串。
而UTF & 1 表示一個ANSI字符串,用戶在編寫程序中一般不應(yīng)去獲取或修改該UTF標(biāo)記,該格式標(biāo)記應(yīng)由aardio自動,用于優(yōu)化自動編碼轉(zhuǎn)換的效率。
用戶應(yīng)當(dāng)明確的了解一個文本的來源編碼,并且有有需要時使用stng.fmto()等轉(zhuǎn)換函數(shù)進行編碼轉(zhuǎn)換。
aardio只要在能確認(rèn)一個字符串的編碼格式時才會對字符串進行標(biāo)記(例如:直接寫在aardio源碼中的字符串字面值,或者經(jīng)過stng.fmto函數(shù)成功轉(zhuǎn)換編碼的字符串)。
二、轉(zhuǎn)義字符串
轉(zhuǎn)義字符串放在單引號中。支持轉(zhuǎn)義符,語法與CC++相同。
需要注意的aardio中雙引號中的字符串不能使用轉(zhuǎn)義符,這一點與C語言有別。
在單引號中的字符串可以換行書寫,但是aardio會忽略所有的換行,
aardio保證單引號中只能以”表示回車換行符,所有字面值的回車換行被忽略 。
轉(zhuǎn)義字符串支持的轉(zhuǎn)義符與C,等類似:
轉(zhuǎn)義符 說明
表示普通字符
ddd 用一到三個數(shù)字組成十進制數(shù)值表示一個字符 ,
如果數(shù)值開始是數(shù)字0,將使用八進制表示一個字符,
如果只想表示”后面有其他不相關(guān)的數(shù)字,
可以在后面加一個換行,例如 str =’ 86′
? 用x后面的兩位十六進制表示一個字符
uAAAA 用u后面的四位十六進制表示一個Unicode或雙字節(jié)字符,
注意普通字符串里默認(rèn)會解析為UTF-8編碼的多字節(jié)字符,
而在Unicode字符串中解析為UTF-16編碼的雙字節(jié)字符。
響鈴符(常用于pnt函數(shù)發(fā)出警告,例如 io.pnt(”)
退格 換頁 回車 換行
回車換行 制表符(橫向跳格)
匹配一個垂直制表符。等價于 ” 雙引號’ 單引號
[ 方括號[] 方括號]
轉(zhuǎn)義字符串可以換行、但是aardio會忽略換行符,必須使用表示換行、用表示回車換行。
如果單引號中僅包含一個字符、并且后面附加#號后綴、則表示該字符的字節(jié)碼數(shù)值。
示例:
注意在轉(zhuǎn)義符串結(jié)束后附加#符號表示字節(jié)碼,附加U或u表示Unicode字符串(UTF16編碼),例如:
Unicode字符串(UTF16編碼)用下標(biāo)取字節(jié)或字符時,返回的是雙字節(jié)的值,例如
三、包含字符串
包含字符串用于將一個文件直接嵌入aardio代碼中,并加載為一個二進制字符串。 例如:
在aardio程序編譯發(fā)布以后,該文件就會直接被編譯到aardio代碼中,不再需要原來的文件也可以運行。
四、注釋字符串
在aardio的賦值中,可以將行注釋、段注釋作為一個字符串組成賦值。
因為aardio中段注定可以自定義注釋標(biāo)記里 星號數(shù)目 – 只要首尾匹配就可以,這就可以方便的用來表示復(fù)雜的字符串。
而不用擔(dān)心所包含的字符串里可能出現(xiàn)字符串的結(jié)束標(biāo)記。
注釋字符串的作用與雙引號類似,表示的是純文本字符串,aardio解析后會將起標(biāo)記為UTF8編碼,
但是段注釋保證將換行解釋為’,并且忽略首尾緊鄰星號的第一個空行(如果有的話),而行注釋保證字符串沒有回車符(”)或換行符(”)
附:字符串導(dǎo)航圖
回車換行符
在計算機還沒有出現(xiàn)之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。
要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結(jié)束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
后來,計算機發(fā)明了,這兩個概念也就被搬到了計算機上。那時,存儲器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個字符太浪費了,加一個就可以。于是,就出現(xiàn)了分歧。
Unix 系統(tǒng)里,每行結(jié)尾只有“<換行>”,即”;
Windows系統(tǒng)里面,每行結(jié)尾是“<回車 ><換行>”,即”;
Mac系統(tǒng)里,每行結(jié)尾是“<回車>”。
在aardio中可使用stng.crlf() 函數(shù)格式化換行為統(tǒng)一風(fēng)格。
一個直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成一行;
而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個^M符號
0x0D(asc碼是13) 指的是“回車” aardio中寫為” 是把光標(biāo)置于本行行首
0x0A(asc碼是10) 指的是“換行” aardio中寫為” 是把光標(biāo)置于下一行的同一列
0x0D + 0x0A 回車換行 aardio中寫為” 把光標(biāo)置于下一行行首
文本模式
在windows中默認(rèn)的以”表示文本換行,如果指定文本模式讀寫文件時,則讀取文件時會自動將回車換行轉(zhuǎn)換為”,而在寫入時又自動將”轉(zhuǎn)換為”
在使用io.open函數(shù)時,可以用’b’標(biāo)記指定二進制模式,而使用’t’標(biāo)記指定文本模式(默認(rèn)設(shè)置),
在設(shè)置winform程序時,要注意普通文本框控件使用”表示換行,而chedit控件則使用”表示換行.
在字符串中表示回車換行
aardio有多種表示字符串的方法,
而這些表示方法都有預(yù)定義的回車換行解析規(guī)則。
這些規(guī)則不會受到源文件實際使用的換行字符影響,即無論你是以”,”或者”換行。
aardio會按下面的規(guī)則解析回車換行:
在賦值中以段注釋表示的字符串,保證換行為”
table(表)
table是aardio中唯一的數(shù)據(jù)結(jié)構(gòu)類型,用來構(gòu)建有序或無序的(collection)。
1、表結(jié)構(gòu)
一個表可以包含以下兩種數(shù)據(jù):
a)、哈希表
無序又稱為字典(Dictionaes)、哈希表(hashtable),映(Map),聯(lián)合內(nèi)存(associative memoes),聯(lián)合數(shù)組(associative arrays),每個元素都是一個“鍵值對(key:value pairs )”。“鍵”可以是字符或其他除null以外的數(shù)據(jù)類型,甚至可以在table元素中包含table,table允許嵌套。
通常把“鍵”放在索引作符“[]”中來索引一個元素的值,這時候鍵又稱為“下標(biāo)”或“索引”。例如 tab[“鍵”] tab[1] ;也可以把一個符合變量命名規(guī)則的鍵放在成員作符“.”后面,例如 tab.key tab.key2 ;
b)、數(shù)組
table中以從1開始有序連續(xù)的數(shù)值索引存儲的元素構(gòu)成數(shù)組。數(shù)組在內(nèi)存中的存儲是有序的。
如果table中的部分元素使用了數(shù)字鍵但是并未包含在從1開始有序連續(xù)的數(shù)值索引中、則構(gòu)成稀疏數(shù)組。
在aardio所指的數(shù)組專指有序連續(xù)數(shù)組。
2、構(gòu)造表
用{}作符構(gòu)造新的table對象,并以分號;分隔每一個元素 (不能使用逗號代替分號)。
如果成員是一個函數(shù)并以}或end結(jié)束時,可以省略分隔符。
{}作符在表達式中只能作為賦值的右值、函數(shù)參數(shù)、或被包含在另一個table構(gòu)造器中,而不允許與其他作符結(jié)合,不允許向前結(jié)合、向后結(jié)合,僅允許被括號{}[]()包含。
創(chuàng)建一個空的table。
days = {}
創(chuàng)建一個table數(shù)組。
days = { “Sunday”; “Monday”; “Tuesday”; “Wednesday”; “Thursday”; “Fday”; “Saturday” }
//days[1] 的內(nèi)容是 “Sunday”.days[2]的內(nèi)容就是”Monday”……
table元素可以使用各種數(shù)據(jù)類型的變量,甚至可以是一個表達式或者一個函數(shù),如果我們?yōu)閠able中的值賦于一個鍵名字,則在table字典中添加一個鍵值對。
point = { x=100 ; y=200 }
//point.x 的值是100;point.y 的值是200
可以在一個table中同時包括“數(shù)組”、“字典”。
tab = {x=100;y=200;”Sunday”; “Monday”}
//tab.x 的值是100;tab.y 的值是200
table的鍵名并不要求符合變量命名規(guī)則,鍵可以是任何除null以外的值或字符串。
但是在{}構(gòu)造器中的鍵名必須符合變量命名規(guī)則。
在任何時候,table中不符合變量命名規(guī)則的鍵必須通過[]作符訪問,以下是正確的寫法:
tab = { [1]=300;[2]=400;[“+”]=200;[1+1]=200 }; //因為變量名不能以數(shù)字開始,更不能包含運算符。
以上的寫法等價于
tab ={};
tab[1]=300;
tab[2]=400;
tab[“+”]=200;
tab[1+1]=200;
我們可以把多個變量用一對花括號包含起來以轉(zhuǎn)換為table數(shù)組,也可以通過table.unpack函數(shù)將table數(shù)組轉(zhuǎn)換為多個變量。
tab = {“a”;”abc”;”abcd”} ; //創(chuàng)建一個table;
a,b,c = table.unpack(tab);
tab ={ table.unpack(tab) }; //將所有返回值轉(zhuǎn)換為table變量tlinks
3、在函數(shù)參數(shù)中構(gòu)造表
當(dāng)在函數(shù)內(nèi)部有且只有一個使用{}構(gòu)造器構(gòu)建的table參數(shù)時,并且不包含數(shù)組元素,則{}可以省略。