最近項(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 為起始