從本篇博客開(kāi)始研究一下Lua,現(xiàn)在的Lua真得是很火,因?yàn)镃ocos2d-x寫(xiě)游戲的時(shí)候會(huì)用到,所以就拿過(guò)來(lái)學(xué)學(xué)吧,先從基礎(chǔ)的語(yǔ)法開(kāi)始,然后慢慢的深入。本人也是剛剛學(xué)習(xí),希望和學(xué)習(xí)Lua的大家交流,博客權(quán)當(dāng)筆記,有錯(cuò)誤之處還請(qǐng)賜教。
當(dāng)然首先是開(kāi)發(fā)環(huán)境了,我的學(xué)習(xí)背景是Cocos2d-x,所以下載了最近發(fā)布的Cocos Code IDE版本,我們可以在Cocos Code IDE上邊新建工程,然后寫(xiě)Lua測(cè)試代碼,關(guān)于Cocos Code IDE的使用官方有不少的教程,這里就不說(shuō)了。當(dāng)然你也可以在控制臺(tái)下寫(xiě)一些Lua命令,這種和命令行交互的方式比較適合簡(jiǎn)單的測(cè)試,需要做得工作是下載Lua,然后在控制臺(tái)敲入Lua,在Mac下下載Lua只需要敲入命令brew install lua就搞定了,如果你沒(méi)有安裝brew,就先安裝一下brew,最后如圖所示代表你就成功了。

環(huán)境搭建好了以后就開(kāi)始來(lái)接觸一下這個(gè)腳本語(yǔ)言吧。首先是最基礎(chǔ)的Lua類(lèi)型,下面一一介紹。
--nil--Lua中特殊的類(lèi)型,他只有一個(gè)值:nil,一個(gè)全局變量沒(méi)有被賦值以前默認(rèn)值為nil,給全局變量負(fù)nil可以刪除該變量。print(i)i = nil--booleans--兩個(gè)取值false和true。但要注意Lua中所有的值都可以作為條件。在控制結(jié)構(gòu)的條件中除了false和nil為假,--其他值都為真。所以Lua認(rèn)為0和空串都是真。--numbers--表示實(shí)數(shù),Lua中沒(méi)有整數(shù)。用實(shí)數(shù)代替整數(shù)不會(huì)有什么誤差(除非數(shù)字大于100,000,000,000,000)。Lua的numbers可以處理任何長(zhǎng)整數(shù)不用擔(dān)心誤差。--strings--字符串類(lèi)型,Lua中字符串是不可以修改的,你可以創(chuàng)建一個(gè)新的變量存放你要的字符串local a = "hello lua"local b = string.gsub(a,"hello","hi")print(a)print(b)--可以使用單引號(hào)或者雙引號(hào)表示字符串a(chǎn) = "a line"b = 'another line'--lua同樣支持轉(zhuǎn)義字符--/a bell--/b back space -- 后退--/f form feed -- 換頁(yè)--/n newline -- 換行--/r carriage return -- 回車(chē)--/t horizontal tab -- 制表--/v vertical tab--// backslash -- "/"--/" double quote -- 雙引號(hào)--/' single quote -- 單引號(hào)--還可以使用[[...]]表示字符串。這種形式的字符串可以包含多行,也可以嵌套且不會(huì)解釋轉(zhuǎn)義序列,--如果第一個(gè)字符是換行符會(huì)被自動(dòng)忽略掉。local code = [[/b back space -- 后退/f form feed -- 換頁(yè)/n newline -- 換行]]print(code)--運(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ù)字。print("10" + 1) --> 11--當(dāng)Lua期望一個(gè)string而碰到數(shù)字時(shí),會(huì)將數(shù)字轉(zhuǎn)成string。..是字符串連接符,將字符串連接起來(lái),當(dāng)連接倆個(gè)數(shù)字--的時(shí)候,注意數(shù)字后邊要有空格print(10 .. 20) --> 1020--如果需要顯式將string轉(zhuǎn)成數(shù)字可以使用函數(shù)tonumber(),如果string不是正確的數(shù)字該函數(shù)將返回nil。--反之,可以調(diào)用tostring()將數(shù)字轉(zhuǎn)成字符串,這種轉(zhuǎn)換一直有效print(1+tonumber(2)) -->3print(tostring(100)) -->100--function--函數(shù)是第一類(lèi)值(和其他變量相同),意味著函數(shù)可以存儲(chǔ)在變量中,可以作為函數(shù)的參數(shù),也可以作為函數(shù)的返回值。--Userdata and Threads--userdata就是用戶數(shù)據(jù)類(lèi)型,指的是自己定義的類(lèi)型,userdata在Lua中除了賦值和相等比較外沒(méi)有預(yù)定義的操作--thread代表線程--table表 比較重要 以上三個(gè)數(shù)據(jù)類(lèi)型在其他博客說(shuō)明--變量的作用域--全局變量不需要聲明,給一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量,訪問(wèn)一個(gè)沒(méi)有初始化的全局變量也不會(huì)出錯(cuò),--只不過(guò)得到的結(jié)果是:nil.print(i) -->nil--聲明一個(gè)局部變量使用local 局部變量只在局部代碼塊中有效,比如在循環(huán)中,if語(yǔ)句中,do end代碼塊中--我們應(yīng)該盡可能的使用局部變量local j = 1do local k = 1endprint(k) -->nil--標(biāo)示符--字母(letter)或者下劃線開(kāi)頭的字母、下劃線、數(shù)字序列.最好不要使用下劃線加大寫(xiě)字母的標(biāo)示符,因?yàn)長(zhǎng)ua的保留字也是這樣的。--注意:Lua是大小寫(xiě)敏感的.--注釋?zhuān)簡(jiǎn)涡凶⑨?----多行注釋?zhuān)?-[[ --]]新聞熱點(diǎn)
疑難解答
圖片精選