lua學(xué)習(xí)筆記

最近項(xiàng)目要用的lua 所以抽空學(xué)習(xí) 記錄一下

IDE有ZeroBrane Studio 我還是用的sublime

注釋

-- 兩個(gè)減號(hào)是行注釋
--[[
 這是塊注釋
 這是塊注釋
 --]]

數(shù)據(jù)類型

Lua是動(dòng)態(tài)類型語(yǔ)言瓦盛,變量不要類型定義,只需要為變量賦值尚困。
Lua中有8個(gè)基本類型分別為:

nil、boolean厂置、number鳄虱、string郁稍、userdata、function官疲、thread和table

lua 變量默認(rèn)全局,如果需要局部 變量前加local關(guān)鍵字
變量的默認(rèn)值為nil

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

變量

Lua腳本中的變量是無(wú)類型的亮隙、隱式聲明途凫、首個(gè)字符必須是非數(shù)字字符、對(duì)大小寫敏感溢吻。Lua腳本中變量的一個(gè)重要特性生支持多重賦值维费,即允許在賦值運(yùn)算符的左邊同時(shí)寫下多個(gè)變量。如

-- 變量個(gè)數(shù)等于數(shù)值個(gè)數(shù)
x,y,z=1,2,3
-- 變量個(gè)數(shù)大于數(shù)值個(gè)數(shù),z的值為nil
x,y,z=1,2
-- 變量個(gè)數(shù)小于數(shù)值個(gè)數(shù),3這個(gè)數(shù)值將被忽略
x,y=1,2,3

流程控制

控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值促王,Lua認(rèn)為false和nil為假犀盟,true和非nil為真。
要注意的是Lua中 0 為 true

if(0)
then
    print("0 為 true")
end

if-else 分支

i = 10
if i = 0 then
-- do something
elseif i > 5 and i < 10 then
-- do something
else
-- do something 
end

while 循環(huán)

i = 0
while i < 100 do
  -- do something
  i = i + 1
end

until 循環(huán)

sum = 2
repeat
  sum = sum ^ 2
until sum > 100

for 循環(huán)

for i=1, 100, 2 do
-- do something
end

迭代器

在Lua中迭代器是一種支持指針類型的結(jié)構(gòu)蝇狼,它可以遍歷集合的每一個(gè)元素

for k, v in pairs(t) do
    print(k, v)
end

table

table 是 Lua 的一種數(shù)據(jù)結(jié)構(gòu)用來(lái)幫助我們創(chuàng)建不同的數(shù)據(jù)類型阅畴,如:數(shù)字、字典等.Lua table 是不固定大小的.

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收會(huì)釋放內(nèi)存

關(guān)鍵字

關(guān)鍵字是不能做為變量的题翰。Lua的關(guān)鍵字不多恶阴,就以下幾個(gè):

and        break        do        else        elseif        
end        false        for        function        if        
in        local        nil        not        or        
repeat        return        then        true        until        while

Function

函數(shù)诈胜,在Lua中,函數(shù)的定義也很簡(jiǎn)單冯事。典型的定義如下:

function add(a,b)  -- add 是函數(shù)名字焦匈,a和b是參數(shù)名字
return a+b  -- return 用來(lái)返回函數(shù)的運(yùn)行結(jié)果
end 

請(qǐng)注意,return語(yǔ)言一定要寫在end之前昵仅。假如我們非要在中間放上一句return缓熟,那么就應(yīng)該要寫成:do return end。
上面的函數(shù)定義摔笤,其實(shí)相當(dāng)于:

add = function (a,b) return a+b end

當(dāng)重新給add賦值時(shí)够滑,它就不再表示這個(gè)函數(shù)了。我們甚至可以賦給add任意數(shù)據(jù)吕世,包括nil (這樣彰触,賦值為nil,將會(huì)把該變量清除)命辖。Function是不是很象C語(yǔ)言的函數(shù)指針呢况毅?

和C語(yǔ)言一樣,Lua的函數(shù)可以接受可變參數(shù)個(gè)數(shù)尔艇,它同樣是用"..."來(lái)定義的尔许,比如:
function sum (a,b, )
如果想取得...所代表的參數(shù),可以在函數(shù)中訪問arg局部變量(表類型)得到 (lua5.1: 取消arg终娃,并直接用"..."來(lái)代表可變參數(shù)了味廊,本質(zhì)還是arg)。
如 sum(1,2,3,4)
則棠耕,在函數(shù)中余佛,a = 1, b = 2, arg = {3, 4} (lua5.1: a = 1, b = 2, ... = {3, 4})
更可貴的是,它可以同時(shí)返回多個(gè)結(jié)果窍荧,比如:

function s()
return 1,2,3,4
end
a,b,c,d = s()  -- 此時(shí)衙熔,a = 1, b = 2, c = 3, d = 4 

前面說(shuō)過,表類型可以擁有任意類型的值搅荞,包括函數(shù)红氯!因此,有一個(gè)很強(qiáng)大的特性是咕痛,擁有函數(shù)的表痢甘,哦,我想更恰當(dāng)?shù)膽?yīng)該說(shuō)是對(duì)象吧茉贡。Lua可以使用面向?qū)ο缶幊塘巳ぁ2恍牛颗e例如下:

t =
{
Age = 27
add = function(self, n) self.Age = self.Age+n end
}
print(t.Age)  -- 27
t.add(t, 10)
print(t.Age)  -- 37

不過腔丧,t.add(t,10) 這一句實(shí)在是有點(diǎn)土對(duì)吧放椰?沒關(guān)系作烟,在Lua中,我們可以簡(jiǎn)寫成:
t:add(10) -- 相當(dāng)于 t.add(t,10)

數(shù)組

array = {"Lua", "sallen"}

for i= 0, 2 do
   print(array[i])
end

以上代碼執(zhí)行輸出結(jié)果為:

nil
Lua
sallen

我們可以使用整數(shù)索引來(lái)訪問數(shù)組元素砾医,如果知道的索引沒有值則返回nil拿撩。在 Lua 索引值是以 1 為起始

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市如蚜,隨后出現(xiàn)的幾起案子压恒,更是在濱河造成了極大的恐慌,老刑警劉巖错邦,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件探赫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡撬呢,警方通過查閱死者的電腦和手機(jī)伦吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)魂拦,“玉大人讨勤,你說(shuō)我怎么就攤上這事〕苛恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谱姓,是天一觀的道長(zhǎng)借尿。 經(jīng)常有香客問我,道長(zhǎng)屉来,這世上最難降的妖魔是什么路翻? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮茄靠,結(jié)果婚禮上茂契,老公的妹妹穿的比我還像新娘。我一直安慰自己慨绳,他們只是感情好掉冶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脐雪,像睡著了一般厌小。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上战秋,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天璧亚,我揣著相機(jī)與錄音,去河邊找鬼脂信。 笑死癣蟋,一個(gè)胖子當(dāng)著我的面吹牛透硝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疯搅,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼濒生,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了秉撇?” 一聲冷哼從身側(cè)響起甜攀,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琐馆,沒想到半個(gè)月后规阀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦麸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年谁撼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滋饲。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厉碟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屠缭,到底是詐尸還是另有隱情箍鼓,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布呵曹,位于F島的核電站款咖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奄喂。R本人自食惡果不足惜铐殃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跨新。 院中可真熱鬧富腊,春花似錦、人聲如沸域帐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肖揣。三九已至帘腹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間许饿,已是汗流浹背阳欲。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人球化。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓秽晚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筒愚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赴蝇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容