Programmming in Lua學(xué)習(xí)筆記
author:陣雨 2005年11月17日2:34:46
第0章 序言
Lua所提供的機(jī)制是C不善于的:高級(jí)語(yǔ)言、動(dòng)態(tài)結(jié)構(gòu)、簡(jiǎn)潔,易于測(cè)試和調(diào)試。
正因?yàn)槿绱?,Lua具有良好的安全保證,自動(dòng)內(nèi)存管理,簡(jiǎn)便的字符串處理功能
以及其他動(dòng)態(tài)數(shù)據(jù)的改變。
Lua具有可擴(kuò)展、簡(jiǎn)單、高效、跨平臺(tái)的特點(diǎn)。
第 1 章 起點(diǎn)
一個(gè)Chunk可以是一個(gè)語(yǔ)句,也可以是一系列語(yǔ)句的組合,還可以是函數(shù),Chunk可以很大,在Lua中幾個(gè)Mbyte的Chunk
是很常見(jiàn)的。
全局變量不需要聲明,給一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量,訪(fǎng)問(wèn)一個(gè)沒(méi)有初始值的全局
變量也不會(huì)出錯(cuò),只不過(guò)的得到的結(jié)果是:nil。
如果想刪除一個(gè)全局變量,只需要將變量賦值為 nil.
第 2 章 類(lèi)型和值
每個(gè)語(yǔ)句結(jié)尾的分號(hào) ';' 是可選的,但是如果同一行有多個(gè)語(yǔ)句最好用' ; '來(lái)將其隔開(kāi)
Lua是動(dòng)態(tài)類(lèi)型語(yǔ)言,變量不要類(lèi)型定義。lua中有8種基本類(lèi)型分別為:
nil ,boolean ,number, string,userdata,function,thread,table
變量沒(méi)有預(yù)定義的類(lèi)型,每一個(gè)變量都可能包含任一種類(lèi)型的值,例如:
print(type(a)) -->nil ('a' is not initialized)
a=10
print(type(a)) -->number
a="a string"
print(type(a)) -->string
a=print -->yes ,this is valid!
a(type(a)) -->function
我們可以使用function像使用其它值一樣使用
Nil
Lua中特殊的類(lèi)型,它只有一個(gè)值:nil,一個(gè)全局變量沒(méi)有被賦值以前默認(rèn)值為nil
Booleans 兩個(gè)取值 false 和 true ,但要注意Lua中 “所有的值”都可以用作為條件,在控制結(jié)構(gòu)的
條件中除了false 和 nil 為假,其它值都為真,所以L(fǎng)ua認(rèn)為0和空串都是真.
Lua的字符串可以包含任何數(shù)值的字符,包括嵌入的0,這意味著你可以存儲(chǔ)任意的二進(jìn)制數(shù)據(jù)在一個(gè)字符串里面。
字符串是不可以修改的,你可以創(chuàng)建一個(gè)新的變量來(lái)存儲(chǔ)你要的字符串
Lua可以高效率的處理長(zhǎng)字符串,1M大小的string在Lua中是常見(jiàn)的。
可以用單引號(hào)或者雙引號(hào)來(lái)表示字符串 a="a lien" ,b='another line'
轉(zhuǎn)義字符與C語(yǔ)言相同。
可以在字符串中使用\ddd (ddd為三位十進(jìn)制數(shù)字) 方式來(lái)表示字母
還可以使用[[ ...]]來(lái)表示字符串,這種形式的字符串可以包含多行,也可以嵌套,
而且不會(huì)解釋轉(zhuǎn)移字符,如果第一個(gè)字符是換行符會(huì)被自動(dòng)忽略掉,這種形式的字符串
用來(lái)包含一段代碼是非常方便的
運(yùn)行時(shí),Lua會(huì)自動(dòng)在string和numbers之間自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,當(dāng)一個(gè)字符串使用算術(shù)
操作符時(shí),string會(huì)被轉(zhuǎn)換成數(shù)字
盡管字符串和數(shù)字可以自動(dòng)轉(zhuǎn)換,但是兩者是不同的,比如 10 ~= "10".
Lua通過(guò)引用比較tables userdata functions ,也就是說(shuō)當(dāng)且僅當(dāng)兩者表示同一個(gè)對(duì)象時(shí)
他們才相同,nil只和nil相等。如果兩個(gè)值類(lèi)型不同,Lua則認(rèn)為他們不同
第 3 章 表達(dá)式
and 和 or 的運(yùn)算結(jié)果不是true或者false,而是和它的兩個(gè)操作數(shù)相關(guān).
a and b a or b 按照C語(yǔ)言的邏輯運(yùn)算順序計(jì)算,a、b兩個(gè)表達(dá)式,計(jì)算到哪一個(gè)就返回哪一個(gè)的值
例如:a && b 如果 a為false,那么無(wú)須計(jì)算b 即可知表達(dá)式為false
所以 a and b的結(jié)果是如果a為false,則返回a,否則返回b
一個(gè)很實(shí)用的技巧,x = x or v
C語(yǔ)言中的 a ? b:c 等價(jià)于Lua中的 (a and b) or c
運(yùn)算符的優(yōu)先級(jí)(可惜沒(méi)有位運(yùn)算
):
^
not -(unary)
* /
+ -
..
< > <= >= ~= ==
and
or
除了^和 .. 之外所有的二元運(yùn)算符都是左連接的。
Lua中的表可以用字符串和數(shù)字作為index,如tt={name="table",["size"]=2,[3]="number"}
如果不使用數(shù)字表達(dá)式,Lua則自動(dòng)從數(shù)字 1 開(kāi)始作為index,如tt={"table",2} 那么tt[1]=="table,tt[2]==2
在構(gòu)造函數(shù)中,域分隔符逗號(hào)(,)是可以用分號(hào)(;)替代的,通常我們用分號(hào)來(lái)分割不同類(lèi)型的表元素。如:
tt={x=10,y=45 ; "one","two","three"}
The syntax var.NAME is just syntactic sugar for var["NAME"]:
posted on 2005-11-17 02:30
陣雨 閱讀(2111)
評(píng)論(3) 編輯 收藏 引用 所屬分類(lèi):
Lua Programming