Lua核心程式設計之基礎

2021-07-11 09:52:18 字數 4853 閱讀 6379

由於本人這個學期選了一門選修課《cocos2d-x移動遊戲開發》,所以想整理一下筆記了。不保證部落格的全面性,我只記一些我認為需要記錄的,最好的學習方式還是看書。

學習資料:《cocos2d-x之lua核心程式設計》、極客學院、老師的ppt

學習環境:mac os x,sublime text,cocos2d-x 3.1,lua 5.3

編譯環境的搭建請參考其他部落格,感覺搭建環境還是挺費事的。

一、lua基礎語法

1、21個關鍵字:

and  break  do  else  else if  end   false   for   function   if

in   local   nil   not   orrepeat   return   then   true   until    while 

2、lua中的8種基礎型別:

nil: 空  (可以用來刪除乙個元素)

boolean: 布林

number: 數字

string: 字串

function: 函式

table: 表

userdata: 定義資料型別

thread: 執行緒

用函式type來檢測乙個變數的型別。

如型別測試:

print(type(var)) 

var = 20 

print(type(var)) 

var = "hello world" 

print(type(var))

var = print 

print(type(var)) 

var = {} 

print(type(var))

3、string型別

來處理轉義定義字串,括號中間可以加 若干個"="號,如 [==[ ... ]==]

下面的語句所表 的是完全相同的字串:

a = 'alo\n123"'

a = "alo\n123\""

a = '\97lo\10\04923"' 

a = [[alo

123"]] 

a = [==[

alo

123"]==]

4、需要連線兩個字串用連線操作符".."( 類似c語言中的strcat )

eg: print("hello".."world")

5、"#"獲取字串的長度。

eg:  a = "hello world"

print(#a)

或string庫函式

a = "hello world" print(string.len(a))    (貌似這個函式最新版本的lua不再支援了)

6、table = 陣列+對映

1)陣列

①a = {}

a[1]=1

a[2]=5

a[3]="hello"

print(a[1],a[2],a[3])

②a =

print(a[1],a[2],a[3])

這兩種定義方式效果一樣。

2)對映

類似於c語言中的map,裡面的是key值。(資料庫的table)

①a= {}

a["hello"]=2

a[3]=false

print(a.hello,a[3])

②a=print(a.hello,a[3])

這兩種定義方式效果一樣。

7、邏輯運算子:and(與)   or(或)   not(非 )

8、區域性變數:

i = 10           -- 全域性變數

local j = i      -- 區域性變數

9、控制語句

1)if...then...else

lua中的寫法:

if a>b then

else if a>c then

else

end

lua中不支援switch語句,條件判斷只有if語句。

2)while

lua中的寫法:

while a<5 do

a = a + 1

end

3)repeat...until

lua中的repeat語句類似於c語言中的do...while語句,先執行一次再判斷條件是否滿足。

lua中的寫法:

local i = 0

repeat

i = i + 1

print(i..", ")

until i>3

--輸出為1,2,3,4

4)for迴圈

①數字for迴圈

for var  = from,end,step do

loop-part

end

eg:倒序輸出整數10到1。

for i=10,1,-1 do

print(i)

end

表示從from到end,每次遞增step。step引數如果不設定的話預設為1。

注:for迴圈的引數為表示式或者函式呼叫時,只會呼叫一次

for i=1,f(x) do 

print(i)

end

②泛型for迴圈,類似於c++中的迭代器(iterator)

io.lines用於遍歷每行; pairs迭代table元素; ipairs用於迭代陣列元素; string.gmatch用於迭代字串中的單詞。

days = 

for k,v in pairs(days) do

print(v)

end

pairs遍歷的結果是雜湊的,隨機的。

a = 

for k,v in ipairs(a) do

print(k,v)

end

編譯結果為:1   20

2   30

原因:ipairs只遍歷陣列,pairs遍歷陣列+對映。

5)控制語句break與return

break 用於退出當前迴圈(for, repeat, while)   ——迴圈外不可使 

return 用來從函式返回結果,當乙個函式自然結束,尾部會有 個預設的return。

tip: lua要求break和return只能出現在block的結尾句

10、函式

函式的目的:封裝、抽象 

封裝是為了隱藏細節

抽象是為了便於理解和重複使用

1)函式定義方法

function func()

end

func = function()  end  --注意:end不可以另起一行
以上兩種函式定義方法效果一樣

2)在lua語言中函式可以當做乙個值賦給變數。

add = function(a,b)  --把函式賦給add

return a+b

endfoo = add --把函式賦給foo

print(foo(1,5))

lua的多返回值

function add(a,b)  

return a+b,a-b

endprint(add(1,5)) -->結果為6 -4

多變數賦值

a,b = 1,2

a,b = b,a

print(a, b) -->2,1

3)函式的引數

lua中函式的引數可以有任意多個。

當給函式傳遞引數時超過了函式定義的形參個數,那麼多餘的引數會被丟棄。

function sum (a, b) 

return a + b

endprint(sum(10, 20, 30)) ——結果為30,自動把多餘的引數30丟棄

傳入的引數形參少,那麼缺少的形參的值預設為nil

function sum (a, b) 

return a + b

endprint(sum(10)) ——結果為0,相當於10+nil=10

4)可變引數

function add( ... )

local s = 0

for i,v in ipairs do

s = s + v

endreturn s

endprint(add (1,2,3,4,5)) --執行結果為15

5)閉包函式

閉包函式是指將乙個函式寫在另乙個函式之內,內部函式可以訪問外部函式的區域性變數。內部函式沒有名稱,通常也叫匿名函式。

function newcounter() 

local i = 0

return function()

i=i+1

return i

endendc1 = newcounter()

print(c1()) --> 1

print(c1()) --> 2

lua程式設計之補充知識

lua語言中的變數在預設情況下是全域性變數,所有的區域性變數在使用前必須宣告。區域性變數的生效範圍僅限於宣告它的 塊。x 10 x 為全部變數 local i 1 i 為區域性變數有些人認為,在 段的中間位置宣告變數是乙個不好的習慣,實際上恰恰相反 1 在需要時才宣告變數可以避免漏掉初始化這個變數 ...

Lua物件導向程式設計之基礎結構table簡例

物件導向程式設計 object oriented programming是一種非常流行的計算機程式設計架構。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua中的function可以用來表示方法。那麼lua中的類可以通過table function模擬出來。簡例 czhe...

windows核心程式設計之核心物件

由於不是計算機科班出身,一直對於程序和執行緒沒有深入的了解,現開始看windows核心程式設計,將具體內容整理一下,以加深印象。1 核心物件,即作業系統維護的乙個資料結構,內部維護該物件的各種資料資訊,常見的核心物件有 用於建立程序的程序核心物件,用於建立執行緒的執行緒核心物件,建立檔案的檔案核心物...