全局變量與局部變量
- local 局部 其他都爲全局
註釋
- 單行註釋 –
- 多行註釋 --[[ ]]
lua中的數據類型
- nil Lua中的特殊的類型
- 一個全局變量沒有被複制以前默認值爲nil
- 給全局變量賦值nil可以刪除該變量
- boolen
- number
- string
- function
類型判斷函數
- type()
函數
參數的默認值
function funA(a,b)
a = a or 1
b = b or 200
print (a)
print (b)
end
不定參數
function func( ... )
for i=1,select('#', ...) do
local argc = select(i, ...)
print("argc:" .. argc)
end
end
func(1,2,3,4,5,6)
select('#', ...)--長度
select(i, ...)--select返回它的第n個可變參數
運算符
- 三目運算符: and or = ? :
- 連接運算: …
- 長度運算符:#
賦值語句
多值賦值
- a,b = 10,2*x <–> a = 10;b = 2 * x
- 多餘的會被忽略 少的會補足nil
交換賦值
x,y = y,x – swap’x’ for ‘y’
函數多返回值
- a,b = f()
- f()返回兩個值,第一個賦給a,第二個賦給b
代碼塊
do
end
分支循環
if then
elseif then
else
end
while a<b do
print(a)
end 循環
lua 中沒有 ++
repeat
print(a)
a = a+1
until a>b 條件爲真 跳出循環與do while 正好相反
for i =1 ,10 ,2 do
end
輸出
1 3 5 7 9
for i =1 ,fun() ,2 do
end
fun()調用一次
lua 沒有continue 只有break
用嵌套循環來替代continue
repeat
if i == 3 then
break
end
until true
4種遍歷
nil也可以打印
for i = 1, len do
end
只輸出數組
for k,v in ipairs(a) do
end
可以輸出所有鍵值
for k,v in next ,a do
end
for k,v in pair(a)do
end
### 插入
table.insert(index,a)
table.insert(a)
table.remove(index)
table.remove(a)
##加載和編譯運行
dofile()--裝載並執行
loadfile()--裝載並編譯爲中間碼,不執行
assert() 返回更清楚的錯誤信息
assert(loadfile()) 如果裝載失敗會拋出
f = loadstring("字符串") 加載不執行
f()執行
f = loadstring("fun a() return a end ")
可以動態從服務器獲取字符串 來執行
require()
隨機數
- my =os.time()系統時間
- math.randomseed(mytime)隨機種子
- math.random(1,10)
拋出錯誤
fun do
- error()
end
s,err = pcall(foo,“rr”) 返回值給err s true or false
協程和線程的區別
線程和協程都是任意時刻只能運行一個
但是一個協程在運行的時候,其他協程是無法獲得執行機會的。只有正在運行的協同程序主動掛起時,其他協同程序纔有機會執行
線程呢 即使不主動休眠,也很有可能因爲輪片時間到達而把執行機會讓給其他線程
function coroutinFun()
local co = coroutine.create(function(a,b)
for i = 1,10 do
print(a+b)
coroutine.yield()
end
end)
return co
end
local co = coroutinFun()
coroutine.resume(co,5,5)
coroutine.resume(co,6,6)
print(coroutine.status(co))
閉包
- 閉包是函數中的函數,可以包含父函數的局部變量的代碼塊:可以讓這些局部變量的值始終保持在內存中
- 它的最大作用處有2個,一個是可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中
function funC()
local ii = 1
function ff()
ii = ii+1
print(ii)
end
return ff
end