Lua語法學習(一)


  • Lua基本語法

    Lua提供交互式編程,可以在命令行中輸入程序並且立即查看結果
    這裏寫圖片描述
    同時也有腳本編程
    將Lua程序代碼保存到一個以.lua的後綴文件中執行
    這裏寫圖片描述

註釋
在Lua中單行註釋爲兩個減號

--註釋

多行註釋

--[[
zzzzzzz
zzzzzzz
zzzzzzz
]]

  • Lua數據類型

    Lua的數據類型只有八種,分別是 nil, boolean, number, string, function, userdata, thread, table
    nil————空值,在條件判斷中爲false
    boolean—-兩個值,false和true
    number—–雙精度類型的實浮點數
    string——-字符串類型,有一對雙引號或單引號來表示
    function—-方法,函數
    userdata—任意存儲在變量中的c數據結構
    thread——執行的獨立線路,用於協同程序
    table——–在Lua中table是一個關聯數組,數組索引可以是字符串或數字

    可以使用type()函數來判斷數據類型

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

  • Lua變量
    Lua的變量類型有三種 : 全局變量, 局部變量, 作用域
    在Lua中,全局變量的聲明哪怕是在語句或函數中聲明,只有前面沒有local修飾變量,都是全局變量
    局部變量的聲明要在變量前加local修飾符
    局部變量的作用域從聲明變量開始到所在的語句塊結束
    變量的默認值均爲nil
    例:
a = 5               -- 全局變量
local b = 5         -- 局部變量

function joke()
    c = 5           -- 全局變量
    local d = 6     -- 局部變量
end

joke()
print(c,d)          --> 5 nil

do 

    local a = 6     -- 局部變量
    b = 6           -- 全局變量

    print(a,b);     --> 6 6
end

print(a,b)      --> 5 6

賦值

a = "hello" .. "world"
b = b + 1

Lua也可以對多個變量同時賦值

a, b = 10 b + a    <--->   a = 10, b = b + a

當變量個數和值個數不同時,Lua會一直根據變量個數採取措施
變量個數 > 值個數 按變量個數補足nil
變量個數 < 值個數 多餘的值會被忽略

a, b, c = 0, 1
print(a,b,c)             --> 0   1   nil

a, b = a+1, b+1, b+2     -- value of b+2 is ignored
print(a,b)               --> 1   2

a, b, c = 0
print(a,b,c)             --> 0   nil   nil

其中最後一種賦值方法是錯誤的,應該從依次對每個變量進行賦值

a, b, c = 0, 0, 0
print(a,b,c)             --> 0   0   0

  • Lua循環
    While循環
while(condition)
do
    statements
end

a=10
while( a < 20 )
do
   print("a 的值爲:", a)
   a = a+1
end

輸出結果

a 的值爲: 10
a 的值爲: 11
a 的值爲: 12
a 的值爲: 13
a 的值爲: 14
a 的值爲: 15
a 的值爲: 16
a 的值爲: 17
a 的值爲: 18
a 的值爲: 19

for循環
for循環分爲兩種 : 數值循環和泛型循環

數值循環

for var=exp1,exp2,exp3 do  
    <執行體>  
end  

var從exp1變化到exp2,每次以exp3的值進行增長,並且執行一次執行體,其中exp3是可選的,如果沒有指定exp3的值,那麼會默認爲1

for i=1,f(x) do
    print(i)
end

for i=10,1,-1 do
    print(i)
end

for的三個表達式在循環開始前一次性求值,以後不再進行求值。比如上面的f(x)只會在循環開始前執行一次,其結果用在後面的循環中。

function f(x)
    print("function")
    return x * 2
end

for i = 1, f(5) do print(i)
end

輸出結果

function
1
2
3
4
5
6
7
8
9
10

泛型循環
泛型for循環是通過一個迭代器來遍歷所有值,類似foreach語句

for i,v in ipairs(a) 
    do print(v) 
end  

i爲數組索引值,v是對應的索引數組元素值,ipairs爲一個迭代器函數

days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}  
for i,v in ipairs(days) do  
    print(v) 
end 

輸出結果

Suanday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

與ipairs用法相近的迭代器函數是pairs
兩者不同在於
ipairs遍歷時不能返回nil,只能返回數字0,如果返回nil則會退出,它只能遍歷到表中出現的第一個不是整數的key
pairs則是可以遍歷表中所有的key,value

遍歷時有一點要注意就是
Lua與其他多數語言不同,迭代的下標是從1開始

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