Lua學習筆記(一)

註釋

-- 單行註釋

--[[
多行註釋
]]

-- 等號數量只要兩邊一致便可
--[=[多行註釋]=]

標識符

A-Z、a-z、下劃線_開頭後加上0個或多個字母、下劃線、數字(0-9)數組

注意:最好不要使用下劃線加大寫字母,Lua保留字也是如此數據結構

不容許特殊字符@、$、%定義標識符函數

區分大小寫測試

關鍵詞

-- Lua的保留關鍵字
and break do else elseif end false for function if in local nil not or repeat return then true until while
-- 通常約定,如下劃線開頭鏈接一串大寫字母的名字(如_VERSION)被保留用於Lua內部全局變量
_VERSION

全局變量

--[[
默認狀況下變量認爲是全局的,不須要聲明,賦值後即建立了這個全局變量,訪問一個沒有初始化的全局變量不會出錯,會返回nil
--]]
print(b) -- 返回nil
b=10
print(b) -- 返回10
-- 若是要刪除一個全局變量,只須要將變量賦值爲nil
b=nil
print(b) -- 返回nil

數據類型

-- Lua是動態類型語言,不須要定義,只須要賦值。值能夠儲存在變量中,做爲參數傳遞或結果返回
-- 8個基本類型nil、boolean、number、string、userdata、function、thread、table
--[[
nil			只有值nil屬於該類,表示一個無效值(在條件表達式中至關於false)
boolean		包含兩個值:false和true
number		雙精度類型的實浮點數
string		字符串由一對雙引號或單引號來表示
function	由C或Lua編寫的函數
userdata	表示任意存儲在變量中的C數據結構
thread		表示執行的獨立線程,用於執行協程
table		Lua中的表是一個「關聯數組」,數組的索引能夠是數字、字符串或表類型。在Lua裏,table的建立時經過「構造表達式」來完成,最簡單構造表達式是{},用來建立一個空表
]]
type() -- 該函數能夠測試給定變量或者值得類型

nil(空)

-- nil類型表示沒有任何有效值,它只有一個值nil
print(type(a)) -- 輸出nil
-- 對於全局變量和table,nil有刪除的做用
tab1={key1="val1",key2="val2","val3"}
for k,v in pairs(tab1) do
    print(k .. " - " .. v) -- ..運算符用於鏈接字符串
end

tab1.key1=nil
for k,v in pairs(tab1) do
    print(k .. " - " .. v)
end

boolean(布爾)

-- 只有兩個可選值:false、true,Lua把false和nil看做是「假」,其餘的都爲真
if false or nil then
    print("至少有一個是true")
else
    print("false和nil都爲false!")
end
-- 執行結果爲false和nil都爲false!

number(數字)

-- Lua默認只有一種number類型 double(雙精度)類型
print(type(2))		-- 輸出number
print(type(2e+1))	-- 輸出number

string(字符串)

string1="this is string1"
string2="this is string2"
-- 也能夠用兩個方括號「[[]]」來表示「一塊」字符串,輸出時會將換行和製表等格式也輸出
string3=[[
emmmmmmmmmm
aaaaaaaaaaa
ruaruaruaruarua!
]]
-- 對一個數字字符串進行算術操做,Lua會嘗試將這個數字字符串轉成一個數字
print("2"+6)		-- 輸出8.0
print("-2e2"*"6")	-- 輸出-1200.0
-- 字符串鏈接使用..操做符,注意操做對象若是爲數字,則操做對象與操做符之間須要加空格
print("2".."b")		-- 輸出2b
print(233 .. 666)	-- 輸出233666
-- 使用#來計算字符串長度,放在字符串前面
len="www.rua.com"
print(#len)				-- 輸出11
print(#"helloworld")	-- 輸出10

table(表)

-- 建立一個空表
local tbl1={}
-- 直接初始表
local tbl2={"a","b","c","d"}
-- 建立鍵值對
a["key"]="value"
a[1]=22
key=10	-- 這裏只是賦值,賦值後用於後面的建立鍵值對
a[key]=22
a[a[key]]=a[key]+11
-- 在Lua中,默認初始索引通常以1開始
local tb1={"a","b","c"}
for key,val in pairs(tb1) do
    print("Key",key)
end
--[[
輸出:
Key 1
Key 2
Key 3
]]
-- table的長度是動態增加的

function(函數)

-- 在Lua中,函數是被看做「第一類值(First-Class Value)」,函數能夠存在變量裏
function fun1(n)	-- 一個遞歸求階乘的函數
    if n == 0 then
        return 1
    else
        return n*fun1(n-1)
    end
end
print(fun1(5))		-- 輸出120
fun2=fun1
print(fun2(5))		-- 輸出120
-- 也能夠使用匿名函數的形式
function testFun(tab,fun)
    for k,v in pairs(tab) do
        print(fun(k,v))
    end
end

tab={kay1="val1",key2="val2"}
testFun(tab,
	function(key,val)
        return key .. "=" .. val
	end
)
--[[
執行結果:
key1=val1
key2=val2
]]

thread(線程)

Lua中主要的線程是協程(coroutine)this

線程能夠同時多個運行,協程任意時刻只能運行一個lua

userdata(自定義類型)

用戶自定義數據,用於表示一種由應用程序或C/C++語言庫所建立的類型,能夠將任意C/C++的任意數據類型的數據(一般是struct和指針)存儲到Lua變量中調用spa

相關文章
相關標籤/搜索