1、lua學習之入門(一)----環境搭建
2、lua學習之入門(二)----基礎語法1
3、lua學習之入門(二)----基礎語法2
4、lua學習之入門(三)----函數
????? 編程語言之所以叫做語言,因為它具有語言的特性,我們回憶一下學英語的過程,首先是學ABC字母,然后是單詞,然后是句子,最后到文章..其實編程語言也具有這樣的特性,標識符等于"字母",值和變量還有API等于"單詞",語句塊或函數,甚至是類等于"句子",一個程序就是一篇"文章"..今天我學習的是"句子",也就是語句塊.
????????在LUA里語句塊是由以下幾個構成的
第一:?? 語句組Chunks??
chunk?::
=
?{stat?[`;′]}

這兒不允許有空的語句段,所以?
'
;;
'
?是非法的。?

lua?把一個?chunk?當作一個擁有不定參數的匿名函數(參見?§
2.5
.
9
)處理。正是這樣,chunk?內可以定義局部變量,接收參數,并且返回值。?

chunk?可以被保存在一個文件中,也可以保存在宿主程序的一個字符串中。當一個?chunk?被執行,首先它會被預編譯成虛擬機中的指令序列,然后被虛擬機解釋運行這些指令。?

chunk?也可以被預編譯成二進制形式;細節參考程序?luac。用源碼形式提供的程序和被編譯過的二進制形式的程序是可以相互替換的;?Lua?會自動識別文件類型并做正確的處理。?
在手冊里,只有這簡短的解析,對于一個初學者,其實真是很抽象(某XX教授:手冊有名字給你叫手冊,用來查不是用來學的..我曰:沒有其他學習資料只有手冊的時候,它就是最好的學習資料.你是教授,級別高,可以單看代碼研究,偶水平差只能折騰手冊!)
Chunks其實是一個代名,
Chunk可以是簡單的一句print("haha");也可以是一個函數外加一個輸出,輸入語句,甚至可以是一個文件,例如我們第一篇測試時候的test.lua....你可以簡單的理解為
Chunk是統稱..代表著一個由語句組成的集合..
第二:語句塊blocks
語句塊是一列語句段;從語法上來說,一個語句塊跟一個?chunk?相同:?

????block?::=?chunk

一個語句塊可以被顯式的寫成一個單獨的語句段:?

????stat?::=?do?block?end

顯式的語句塊對于控制變量的作用范圍很有用。有時候,顯式的語句塊被用來在另一個語句塊中插入?return?或是?break?

代碼塊(語句塊):指一個控制結構內,一個函數體,或者一個
chunk(變量被聲明的那個文件或者文本串)。
第三:控制結構
??? 注意:??? 控制結構的條件表達式結果可以是任何值,Lua認為false和nil為假,其他值為真。
??????? 大學時候,老師跟我說,所有編程語言都是由三種結構組成,順序結構,選擇結構,循環結構.個人認為..這樣設置的原因,和人的生活有很大關系,我們從生老病死,這個就是一個最簡單的順序結構.從生存到消失.人都需要的經歷,但在生老病死的過程中我們又要面臨選擇..老爸老媽沒得選擇...你還沒生,就是你還不存在,所以你沒選擇的權利,那么就是說選擇是建立在已經存在的基礎上的,所以編程就有了if(某某XX某某某)某某勝利..所以這個選擇必須要是有選擇前提的,如果這個選擇是永遠都沒機會選擇..(例如選擇老母- -!沒得選的)這個選擇就沒有了選擇的意義了,還有循環,就是重復實現某事情,例如讀書,7點起床然后上課,然后下課,然后沖涼,然后睡覺,然后又重復到7點起床然后上課,然后下課,然后沖涼,然后睡覺,然后又重復到7點起床..............,這就是一個循環.你必須重復地做某些事情的時候,就可以用循環這個結構是實現重復做某事.
???????? 既然人的一生都是用這三中結構描述的,程序的出現,目的就是幫助人,減輕人的工作量,做這些結構也就是編程語言中的原住民了.
LUA的選擇結構,貌似只有一種就是if
stat?::=?if?exp?then?block?{elseif?exp?then?block}?[else?block]?end

簡單的一句,就表明了,if-else支持嵌套elseif? 寫法有點像VB....
if?a>10?then??print("超過10歲")?
else?print("小于10歲")?
?? end這個就是一個簡單的選擇結構...有編程基礎的一看就懂了.
LUA的循環結構,有三種,分別是
while exp
do block
end ,
repeat block
until exp ,
for Name `
=′ exp `
,′ exp [`
,′ exp]
do block
end
1.
while exp
do block
end
while?condition?do

????statements;

end;

2.
repeat block
until exp
repeat

????statements;

until?conditions;
有點類似do?while3.for....在LUA里for是有兩種情況,如果用C#來描述的話,LUA的for含蓋了C#里的for和foreach兩種,
????? 數值for
范型
for循環:
for?namelist?in?explist1?do?block?end

這里和C#的foreach基本一樣
c#:
foreach(DataRow?ss?in?dataTbale.Rows)
{
??//輸出ss[1]
}

LUA里
days?=?{"Sunday",?"Monday",?"Tuesday",?"Wednesday",

??????????????"Thursday",?"Friday",?"Saturday"}

for?v?in?ipairs(days)?do

????print(days[v]);

end?

只要自己測試一下就知道結果了.
反正就是一個傳統循環,一個迭代循環還需要補充一個語句就是break,和return
break語句用來退出當前循環(for、repeat、while)。在循環外部不可以使用。

return用來從函數返回結果,當一個函數自然結束時,結尾會有一個默認的return。(這種函數類似pascal的過程(procedure))

Lua語法要求break和return只能出現在block的結尾一句(也就是說:作為chunk的最后一句,或者在end之前,或者else前,或者until前),例如:

local?i?=?1

while?a[i]?do

????if?a[i]?==?v?then?break?end

????i?=?i?+?1

end

有時候為了調試或者其他目的需要在block的中間使用return或者break,可以顯式的使用do..end來實現:

function?foo?()

????return????????????--<<?SYNTAX?ERROR

????--?'return'?is?the?last?statement?in?the?next?block

????do?return?end????????--?OK

????
???????????????--?statements?not?reached

end

基本的結構我們都學習完了,學到這里我們基本的LUA都能看懂了,也不能算懂,起碼知道LUA的大概意思了,基礎語法(完)
明鏡臺
posted on 2009-05-12 14:50
^喬喬^ 閱讀(8688)
評論(0) 編輯 收藏 引用 所屬分類:
Lua學習筆記