註釋
-- 單行註釋 --[[ 多行註釋 ]] -- 等號數量只要兩邊一致便可 --[=[多行註釋]=]
標識符
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