欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記

 更新時間:2014年09月28日 09:16:48   投稿:junjie  
這篇文章主要介紹了Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記,本文來自個人總結(jié),需要的朋友可以參考下

賦值語句

注釋,單行用(--)來表示;多行用(--[[ ... ]])來標(biāo)示;
定義,lua中沒有定義(申明數(shù)據(jù)類型),它是通過賦值來確定其數(shù)據(jù)類型的。
賦值,是改變一個變量的值和改變表域的最基本的方法。 a = "hello" .. "world" 

Lua可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量。a, b = 10, 2*x <--> a=10; b=2*x

遇到賦值語句Lua會先計算右邊所有的值然后再執(zhí)行賦值操作,所以我們可以這樣進(jìn)行交換變量的值:

復(fù)制代碼 代碼如下:

x, y = y, x  -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]  -- swap 'a[i]' for 'a[i]'

當(dāng)變量個數(shù)和值的個數(shù)不一致時,Lua會一直以變量個數(shù)為基礎(chǔ)采取以下策略:

a. 變量個數(shù)>值的個數(shù)按變量個數(shù)補(bǔ)足nil ;b. 變量個數(shù)<值的個數(shù)多余的值會被忽略
多值賦值經(jīng)常用來交換變量,或?qū)⒑瘮?shù)調(diào)用返回給變量: a, b = f() --f()返回兩個值,第一個賦給a,第二個賦給b。

表達(dá)式

表達(dá)式---是表達(dá)式就需要運算符。

1.算術(shù)運算符:+-*/^(加減乘除冪,二元運算符),-(負(fù)值,一元運算符);操作跟C++一樣
2.關(guān)系運算符:<、>、<=、>=、==、~=(不等于);這些操作符返回結(jié)果為false或者true;==和~=比較兩個值,如果兩個值類型不同,Lua認(rèn)為兩者不同;nil只和自己相等。Lua通過引用比較tables、userdata、functions。也就是說當(dāng)且僅當(dāng)兩者表示同一個對象時相等。

復(fù)制代碼 代碼如下:

print((2 < 15))   --true
print(("1" == 1)) --false
print(("2" > "15")) --true
a={};a.x=1;a.y=0;
b={};b.x=1;b.y=0;
print((a ~= b)); --true
c = a;
print((a == c)); --true
--Lua比較數(shù)字按傳統(tǒng)的數(shù)字大小進(jìn)行,比較字符串按字母的順序進(jìn)行,但是字母順序依賴于本地環(huán)境。
--為了避免不一致的結(jié)果,混合比較數(shù)字和字符串,Lua會報錯,比如:2 < "15"

3.邏輯運算符:and、or、not;邏輯運算符認(rèn)為false和nil是假(false),其他為真,0也是true.
and和or的運算結(jié)果不是true和false,而是和它的兩個操作數(shù)相關(guān)。a and b -- 如果a為false,則返回a,否則返回b ;a or b -- 如果a為true,則返回a,否則返回b ;想想堆棧,若第一個變量就可以判斷出真假,就不需要判斷第二個變量了。

and的優(yōu)先級比or高。

C語言中的三元運算符,a ? b : c  ==>>在Lua中可以這樣實現(xiàn): (a and b) or c
not的結(jié)果一直返回false或者true

復(fù)制代碼 代碼如下:

print(not nil) --> true
print(not false) --> true
print(not 0) --> false
print(not not nil) --> false

4.連接運算符:.. (兩個點);如果操作數(shù)為數(shù)字,Lua將數(shù)字轉(zhuǎn)成字符串。

復(fù)制代碼 代碼如下:

print("Hello " .. "World") --> Hello World
print(0 .. 1) --> 01

流程控制

控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值,Lua認(rèn)為false和nil為假,其他值為真。
do..end(相當(dāng)于c/c++的{})

if語句,有三種形式

復(fù)制代碼 代碼如下:

if conditions then
    then-part
end;
if conditions then
   then-part
else
   else-part
end;
if conditions then
   then-part
elseif conditions then
    elseif-part
   .. --->多個elseif
else
   else-part
end;

由于Lua不支持switch語句,所以這種一連串的if-else if代碼很常見的。

while語句

復(fù)制代碼 代碼如下:

while condition do
   statements;
end;

repeat-until語句

復(fù)制代碼 代碼如下:

repeat
  statements;
until conditions;

條件判斷是在循環(huán)體之后做的,因此循環(huán)體至少會執(zhí)行一次。類似于C++中的,do..while()

for語句

數(shù)字型for(number for)

復(fù)制代碼 代碼如下:

for var=exp1,exp2,exp3 do
    loop-part
end
--for將用exp3作為step從exp1(初始值)到exp2(終止值),執(zhí)行l(wèi)oop-part。其中exp3可以省略,默認(rèn)step=1

泛型for(generic for),泛型for循環(huán)通過一個迭代器(iterator)函數(shù)類遍歷所有值。

復(fù)制代碼 代碼如下:

--打印數(shù)組a的所有值
for i,v in ipairs(a) do print(v) end

Lua的基礎(chǔ)庫提供了ipairs,這是一個用于遍歷數(shù)組的迭代器函數(shù)。在每次循環(huán)中,i會被賦予一個索引值,同時v被賦予一個對應(yīng)該索引的數(shù)組元素值。

復(fù)制代碼 代碼如下:

再看一個遍歷表key的例子:
-- print all keys of table 't'
--for k in pairs(t) do print(k) end
 
days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
revDays = {}
for i,v in pairs(days) do
revDays[v] = i  --revDays = {["Sunday"] = 1, ["Monday"] = 2,["Tuesday"] = 3, ["Wednesday"] = 4,["Thursday"] = 5, ["Friday"] = 6,["Saturday"] = 7}
end
--x = "Tuesday"
--print(revDays[x])--3

for k in pairs(days) do print(k) end --1234567
for k in pairs(revDays) do print(k) end

標(biāo)準(zhǔn)庫提供了幾種迭代器,包括用于迭代文件中每行的(io.lines)、迭代table元素的(pairs)、迭代數(shù)組元素的(ipairs)、迭代字符串中單詞的(string.gmatch)等。

break和return語句

函數(shù)

復(fù)制代碼 代碼如下:

function foo(a, b, c)
   local sum = a + b
   return sum, c --函數(shù)可以返回多個值
end
r1, r2 = foo(1, '123', 'hello') --平行賦值
print(r1, r2) --124 hello

函數(shù)定義:用關(guān)鍵字function定義函數(shù),以關(guān)鍵字end結(jié)束
局部變量:用關(guān)鍵字local定義。如果沒有用local定義,即使在函數(shù)內(nèi)部定義的變量也是全局變量!
函數(shù)可以返回多個值:return a, b, c, ...
平行賦值:a, b = c, d
全局變量:前面的代碼定義了三個全局變量:foo、r1和r2

相關(guān)文章

  • Mac平臺中編譯安裝Lua運行環(huán)境及Hello Lua實例

    Mac平臺中編譯安裝Lua運行環(huán)境及Hello Lua實例

    這篇文章主要介紹了Mac平臺中編譯安裝Lua運行環(huán)境及Hello Lua實例,本文給出了兩種Hello Lua示例,一種是控制臺直接輸出,通過文件編譯輸出,需要的朋友可以參考下
    2014-10-10
  • Lua實現(xiàn)類繼承

    Lua實現(xiàn)類繼承

    這里給大家演示的是一個使用lua實現(xiàn)類繼承的示例,實現(xiàn)類繼承其實有很多種寫法,這里是本人常用的方法,推薦給大家。
    2015-03-03
  • Lua的函數(shù)環(huán)境、包實例講解

    Lua的函數(shù)環(huán)境、包實例講解

    這篇文章主要介紹了Lua的函數(shù)環(huán)境、包實例講解,本文分別對函數(shù)環(huán)境、包的定義、實現(xiàn)方式、使用方式做了分解,需要的朋友可以參考下
    2014-09-09
  • Lua返回一個Closures函數(shù)實例

    Lua返回一個Closures函數(shù)實例

    這篇文章主要介紹了Lua返回一個Closures函數(shù)實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-04-04
  • Lua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下
    2014-11-11
  • Lua教程(二十):Lua調(diào)用C函數(shù)

    Lua教程(二十):Lua調(diào)用C函數(shù)

    這篇文章主要介紹了Lua教程(二十):Lua調(diào)用C函數(shù),本文講解了C函數(shù)作為應(yīng)用程序的一部分、C函數(shù)庫成為Lua的模塊等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 使用nginx+lua實現(xiàn)信息訪問量統(tǒng)計

    使用nginx+lua實現(xiàn)信息訪問量統(tǒng)計

    這篇文章主要介紹了使用nginx+lua實現(xiàn)信息訪問量統(tǒng)計,功能很簡單,代碼也很簡潔,有需要的小伙伴可以參考下,然后自由擴(kuò)展。
    2015-03-03
  • lua實現(xiàn)的2048小游戲

    lua實現(xiàn)的2048小游戲

    之前給大家分享了好幾個語言版本的2048了,今天再給大家分享一個lua腳本實現(xiàn)的2048小游戲,小伙伴們參考下吧。
    2015-03-03
  • 簡單談?wù)刲ua和c的交互

    簡單談?wù)刲ua和c的交互

    要理解Lua和C++交互,首先要理解Lua堆棧。簡單來說,Lua和C/C++語言通信的主要方法是一個無處不在的虛擬棧。棧的特點是先進(jìn)后出。
    2016-01-01
  • Lua教程(三):表達(dá)式和語句

    Lua教程(三):表達(dá)式和語句

    這篇文章主要介紹了Lua教程(三):表達(dá)式和語句,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、字符串連接、table構(gòu)造器、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論