從本篇博客開始研究一下Lua,現(xiàn)在的Lua真得是很火,因?yàn)镃ocos2d-x寫游戲的時(shí)候會(huì)用到,所以就拿過來學(xué)學(xué)吧,先從基礎(chǔ)的語法開始,然后慢慢的深入。本人也是剛剛學(xué)習(xí),希望和學(xué)習(xí)Lua的大家交流,博客權(quán)當(dāng)筆記,有錯(cuò)誤之處還請(qǐng)賜教。
當(dāng)然首先是開發(fā)環(huán)境了,我的學(xué)習(xí)背景是Cocos2d-x,所以下載了最近發(fā)布的Cocos Code IDE版本,我們可以在Cocos Code IDE上邊新建工程,然后寫Lua測(cè)試代碼,關(guān)于Cocos Code IDE的使用官方有不少的教程,這里就不說了。當(dāng)然你也可以在控制臺(tái)下寫一些Lua命令,這種和命令行交互的方式比較適合簡(jiǎn)單的測(cè)試,需要做得工作是下載Lua,然后在控制臺(tái)敲入Lua,在Mac下下載Lua只需要敲入命令brew install lua就搞定了,如果你沒有安裝brew,就先安裝一下brew,最后如圖所示代表你就成功了。
--nil
--Lua中特殊的類型,他只有一個(gè)值:nil,一個(gè)全局變量沒有被賦值以前默認(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中沒有整數(shù)。用實(shí)數(shù)代替整數(shù)不會(huì)有什么誤差(除非數(shù)字大于100,000,000,000,000)。Lua的numbers可以處理任何長(zhǎng)整數(shù)不用擔(dān)心誤差。
--strings
--字符串類型,Lua中字符串是不可以修改的,你可以創(chuàng)建一個(gè)新的變量存放你要的字符串
local a = "hello lua"
local b = string.gsub(a,"hello","hi")
print(a)
print(b)
--可以使用單引號(hào)或者雙引號(hào)表示字符串
a = "a line"
b = 'another line'
--lua同樣支持轉(zhuǎn)義字符
--\a bell
--\b back space -- 后退
--\f form feed -- 換頁
--\n newline -- 換行
--\r carriage return -- 回車
--\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 -- 換頁
\n newline -- 換行
]]
print(code)
--運(yùn)行時(shí),Lua會(huì)自動(dòng)在string和numbers之間自動(dòng)進(jìn)行類型轉(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。..是字符串連接符,將字符串連接起來,當(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)) -->3
print(tostring(100)) -->100
--function
--函數(shù)是第一類值(和其他變量相同),意味著函數(shù)可以存儲(chǔ)在變量中,可以作為函數(shù)的參數(shù),也可以作為函數(shù)的返回值。
--Userdata and Threads
--userdata就是用戶數(shù)據(jù)類型,指的是自己定義的類型,userdata在Lua中除了賦值和相等比較外沒有預(yù)定義的操作
--thread代表線程
--table表 比較重要 以上三個(gè)數(shù)據(jù)類型在其他博客說明
--變量的作用域
--全局變量不需要聲明,給一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量,訪問一個(gè)沒有初始化的全局變量也不會(huì)出錯(cuò),
--只不過得到的結(jié)果是:nil.
print(i) -->nil
--聲明一個(gè)局部變量使用local 局部變量只在局部代碼塊中有效,比如在循環(huán)中,if語句中,do end代碼塊中
--我們應(yīng)該盡可能的使用局部變量
local j = 1
do
local k = 1
end
print(k) -->nil
--標(biāo)示符
--字母(letter)或者下劃線開頭的字母、下劃線、數(shù)字序列.最好不要使用下劃線加大寫字母的標(biāo)示符,因?yàn)長(zhǎng)ua的保留字也是這樣的。
--注意:Lua是大小寫敏感的.
--注釋:?jiǎn)涡凶⑨?--
--多行注釋:--[[ --]]