lua知識點

全局變量與局部變量

  • 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

面向對象

封裝

  • tolua++ 是一種第三方的軟件包,可以爲lua提供面向對象的特性,這樣我們就可以使用lua來編寫使用C++語言庫的腳本文件。

  • 用:訪問表調用自己的成員函數(可以使用self),用.訪問相當於調用靜態函數(不可以使用self)

  • 靜態變量和成員變量

  • .調用方法不能訪問self,只有:可以訪問

  • return User.id 爲返回靜態變量

  • return self.id 爲返回成員變量

  • lua不支持函數重載

  • 同名方法底下的會覆蓋前面的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章