成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LUA腳本語言入門之Lua程序設計初步

移動開發 iOS
LUA腳本語言入門之Lua程序設計初步是本文要介紹的內容,在這篇文章中,我想向大家介紹如何進行Lua程序設計。一起來看內容。

LUA腳本語言入門之Lua程序設計初步是本文要介紹的內容,在這篇文章中,我想向大家介紹如何進行Lua程序設計。我假設大家都學過至少一門編程語言,比如Basic或C,特別是C。因為Lua的最大用途是在宿主程序中作為腳本使用的。

Lua 的語法比較簡單,學習起來也比較省力,但功能卻并不弱。

在Lua中,一切都是變量,除了關鍵字。請記住這句話。

首先是注釋

寫一個程序,總是少不了注釋的。

在Lua中,你可以使用單行注釋和多行注釋。

單行注釋中,連續兩個減號"--"表示注釋的開始,一直延續到行末為止。相當于C++語言中的"//"。

多行注釋中,由"--[["表示注釋開始,并且一直延續到"]]"為止。這種注釋相當于C語言中的"/*…*/"。在注釋當中,"[["和"]]"是可以嵌套的。

Lua編程

經典的"Hello world"的程序總是被用來開始介紹一種語言。在Lua中,寫一個這樣的程序很簡單:

  1. print("Hello world") 

在Lua中,語句之間可以用分號";"隔開,也可以用空白隔開。一般來說,如果多個語句寫在同一行的話,建議總是用分號隔開。

Lua 有好幾種程序控制語句,如:

條件控制:if 條件 then … elseif 條件 then … else … end

While循環:while 條件 do … end

Repeat循環:repeat … until 條件

For循環:for 變量 = 初值,終點值,步進 do … end

For循環:for 變量1,變量2,… ,變量N in表或枚舉函數 do … end

注意一下,for的循環變量總是只作用于for的局部變量,你也可以省略步進值,這時候,for循環會使用1作為步進值。

你可以用break來中止一個循環。

如果你有程序設計的基礎,比如你學過Basic,C之類的,你會覺得Lua也不難。但Lua有幾個地方是明顯不同于這些程序設計語言的,所以請特別注意。

語句塊

語句塊在C++中是用"{"和"}"括起來的,在Lua中,它是用do 和 end 括起來的。比如:

  1. do print("Hello") end 

你可以在 函數 中和 語句塊 中定局部變量。

賦值語句

賦值語句在Lua被強化了。它可以同時給多個變量賦值。

例如:

  1. a,b,c,d=1,2,3,4 

甚至是:

a,b=b,a -- 多么方便的交換變量功能啊。

在默認情況下,變量總是認為是全局的。假如你要定義局部變量,則在第一次賦值的時候,需要用local說明。比如:

local a,b,c = 1,2,3 -- a,b,c都是局部變量

數值運算

和C語言一樣,支持 +, -, *, /。但Lua還多了一個"^"。這表示指數乘方運算。比如2^3 結果為8, 2^4結果為16。

連接兩個字符串,可以用".."運處符。如:

  1. "This a " .. "string." -- 等于 "this a string" 

比較運算

  1. = == ~= 

分別表示 小于,大于,不大于,不小于,相等,不相等

所有這些操作符總是返回true或false。

對于Table,Function和Userdata類型的數據,只有 == 和 ~=可以用。相等表示兩個變量引用的是同一個數據。比如:

  1.     a={1,2}  
  2.     b=a 
  3.     print(a==b, a~=b) -- true, false  
  4.     a={1,2}  
  5.     b={1,2}  
  6.     print(a==b, a~=b) -- false, true 

邏輯運算

and, or, not

其中,and 和 or 與C語言區別特別大。

在這里,請先記住,在Lua中,只有false和nil才計算為false,其它任何數據都計算為true,0也是true!

and 和 or的運算結果不是true和false,而是和它的兩個操作數相關。

a and b:如果a為false,則返回a;否則返回b

a or b:如果 a 為true,則返回a;否則返回b

舉幾個例子:

  1.      print(4 and 5) --> 5  
  2.      print(nil and 13) --> nil  
  3.      print(false and 13) --> false  
  4.      print(4 or 5) --> 4  
  5.      print(false or 5) --> 5 

在Lua中這是很有用的特性,也是比較令人混洧的特性。

我們可以模擬C語言中的語句:x = a? b : c,在Lua中,可以寫成:x = a and b or c。

最有用的語句是: x = x or v,它相當于:if not x then x = v end 。

運算符優先級,從高到低順序如下:

  1.     ^  
  2.     not - (一元運算)  
  3.      * /      + -  
  4.      ..(字符串連接)  
  5.       = ~= ==  
  6.      and  
  7.      or 

#p#

關鍵字

關鍵字是不能做為變量的。Lua的關鍵字不多,就以下幾個:

  1.   and break do else elseif  
  2.   end false for function if  
  3.   in local nil not or  
  4.   repeat return then true until while 

變量類型

怎么確定一個變量是什么類型的呢?大家可以用type()函數來檢查。Lua支持的類型有以下幾種:

Nil 空值,所有沒有使用過的變量,都是nil。nil既是值,又是類型。

Boolean 布爾值

Number 數值,在Lua里,數值相當于C語言的double

String 字符串,如果你愿意的話,字符串是可以包含'\0'字符的

Table 關系表類型,這個類型功能比較強大,我們在后面慢慢說。

Function 函數類型,不要懷疑,函數也是一種類型,也就是說,所有的函數,它本身就是一個變量。

Userdata 嗯,這個類型專門用來和Lua的宿主打交道的。宿主通常是用C和C++來編寫的,在這種情況下,Userdata可以是宿主的任意數據類型,常用的有Struct和指針。

Thread 

線程類型,在Lua中沒有真正的線程。Lua中可以將一個函數分成幾部份運行。如果感興趣的話,可以去看看Lua的文檔。

變量的定義

所有的語言,都要用到變量。在Lua中,不管你在什么地方使用變量,都不需要聲明,并且所有的這些變量總是全局變量,除非,你在前面加上"local"。

這一點要特別注意,因為你可能想在函數里使用局部變量,卻忘了用local來說明。

至于變量名字,它是大小寫相關的。也就是說,A和a是兩個不同的變量。

定義一個變量的方法就是賦值。"="操作就是用來賦值的

我們一起來定義幾種常用類型的變量吧。 1、

Nil 正如前面所說的,沒有使用過的變量的值,都是Nil。有時候我們也需要將一個變量清除,這時候,我們可以直接給變量賦以nil值。如:

var1=nil -- 請注意 nil 一定要小寫 2、Boolean

布爾值通常是用在進行條件判斷的時候。布爾值有兩種:true 和 false。在Lua中,只有false和nil才被計算為false,而所有任何其它類型的值,都是true。比如0,空串等等,都是true。不要被C語言的習慣所誤導,0在Lua中的的確確是true。你也可以直接給一個變量賦以Boolean類型的值,如:

  1.     varboolean = true 

3、Number

在Lua中,是沒有整數類型的,也不需要。一般情況下,只要數值不是很大(比如不超過100,000,000,000,000),是不會產生舍入誤差的。在很多CPU上,實數的運算并不比整數慢。

實數的表示方法,同C語言類似,如:

  1.     4 0.4 4.57e-3 0.3e12 5e+20 

4、String

字符串,總是一種非常常用的高級類型。在Lua中,你可以非常方便的定義很長很長的字符串。

字符串在Lua中有幾種方法來表示,最通用的方法,是用雙引號或單引號來括起一個字符串的,如:

  1. "This is a string." 

和C語言相同的,它支持一些轉義字符,列表如下:

  1.     \a bell  
  2.     \b back space  
  3.     \f form feed  
  4.     \n newline  
  5.     \r carriage return  
  6.     \t horizontal tab  
  7.     \v vertical tab  
  8.     \\ backslash  
  9.     \" double quote  
  10.     \' single quote  
  11.     \[ left square bracket  
  12.     \] right square bracket 

由于這種字符串只能寫在一行中,因此,不可避免的要用到轉義字符。加入了轉義字符的串,看起來實在是不敢恭維,比如:

  1. "one line\nnext line\n\"in quotes\", 'in quotes'" 

一大堆的"\"符號讓人看起來很倒胃口。如果你與我有同感,那么,我們在Lua中,可以用另一種表示方法:用"[["和"]]"將多行的字符串括起來,如:

  1.     page = [[  
  2.         An HTML Page  
  3.         Lua  
  4.         [[a text between double brackets]]  
  5.     ]] 

值得注意的是,在這種字符串中,如果含有單獨使用的"[["或"]]"就仍然得用"\["或"\]"來避免歧義。當然,這種情況是極少會發生的。

#p#

5、Table

關系表類型,這是一個很強大的類型。我們可以把這個類型看作是一個數組。只是C語言的數組,只能用正整數來作索引;在Lua中,你可以用任意類型來作數組的索引,除了nil。同樣,在C語言中,數組的內容只允許一種類型;在Lua中,你也可以用任意類型的值來作數組的內容,除了nil。

Table的定義很簡單,它的主要特征是用"{"和"}"來括起一系列數據元素的。比如:

  1.     T1 = {} -- 定義一個空表  
  2.     T1[1]=10 -- 然后我們就可以象C語言一樣來使用它了。  
  3.     T1["John"]={Age=27, Gender="Male"}  
  4.     這一句相當于:  
  5.     T1["John"]={} -- 必須先定義成一個表,還記得未定義的變量是nil類型嗎  
  6.     T1["John"]["Age"]=27  
  7.     T1["John"]["Gender"]="Male"  
  8.     當表的索引是字符串的時候,我們可以簡寫成:  
  9.     T1.John={}  
  10.     T1.John.Age=27 
  11.     T1.John.Gender="Male" 
  12.     或  
  13.     T1.John{Age=27, Gender="Male"} 

這是一個很強的特性。

在定義表的時候,我們可以把所有的數據內容一起寫在"{"和"}"之間,這樣子是非常方便,而且很好看。比如,前面的T1的定義,我們可以這么寫:

  1.     T1=  
  2.     {  
  3.       10, -- 相當于 [1] = 10  
  4.       [100] = 40,  
  5.       John= -- 如果你原意,你還可以寫成:["John"] =  
  6.       {  
  7.         Age=27, -- 如果你原意,你還可以寫成:["Age"] =27  
  8.         Gender=Male -- 如果你原意,你還可以寫成:["Gender"] =Male  
  9.       },  
  10.       20 -- 相當于 [2] = 20  
  11.     } 

看起來很漂亮,不是嗎?我們在寫的時候,需要注意三點:

第一,所有元素之間,總是用逗號","隔開;

第二,所有索引值都需要用"["和"]"括起來;如果是字符串,還可以去掉引號和中括號;

第三,如果不寫索引,則索引就會被認為是數字,并按順序自動從1往后編;

表類型的構造是如此的方便,以致于常常被人用來代替配置文件。是的,不用懷疑,它比ini文件要漂亮,并且強大的多。

6、Function

函數,在Lua中,函數的定義也很簡單。典型的定義如下:

  1. function add(a,b) -- add 是函數名字,a和b是參數名字  
  2. return a+b -- return 用來返回函數的運行結果  
  3. end 

請注意,return語言一定要寫在end之前。假如你非要在中間放上一句return,那么請寫成:do return end。

還記得前面說過,函數也是變量類型嗎?上面的函數定義,其實相當于:

  1. add = function (a,b) return a+b end 

當你重新給add賦值時,它就不再表示這個函數了。你甚至可以賦給add任意數據,包括nil (這樣,你就清除了add變量)。Function是不是很象C語言的函數指針呢?
和C語言一樣,Lua的函數可以接受可變參數個數,它同樣是用"…"來定義的,比如:

  1. function sum (a,b,…) 

如果想取得…所代表的參數,可以在函數中訪問arg局部變量(表類型)得到。

  1. 如 sum(1,2,3,4)  
  2. 則,在函數中,a = 1, b = 2, arg = {3, 4} 

更可貴的是,它可以同時返回多個結果,比如:

  1.     function s()  
  2.       return 1,2,3,4  
  3.     end  
  4.     a,b,c,d = s() -- 此時,a = 1b = 2c = 3, d = 4 

前面說過,表類型可以擁有任意類型的值,包括函數!因此,有一個很強大的特性是,擁有函數的表,哦,我想更恰當的應該說是對象吧。Lua可以使用面向對象編程了。不信?那我舉例如下:

  1.     t =  
  2.     {  
  3.      Age = 27 
  4.      add = function(self, n) selfself.Age = self.Age+n end  
  5.     }  
  6.     print(t.Age) -- 27  
  7.     t.add(t, 10)  
  8.     print(t.Age) -- 37  
  9.     不過,t.add(t,10) 這一句實在是有點土對吧?沒關系,在Lua中,你可以簡寫成:  
  10.     t:add(10) -- 相當于 t.add(t,10) 

#p#

7、Userdata 和 Thread

這兩個類型的話題,超出了本文的內容,就不打算細說了。

就這么結束了嗎?當然不是,接下來,需要用Lua解釋器,來幫助你理解和實踐了。這篇小文只是幫助你大體了解Lua的語法。如果你有編程基礎,相信會很快對Lua上手了。

就象C語言一樣,Lua提供了相當多的標準函數來增強語言的功能。使用這些標準函數,你可以很方便的操作各種數據類型,并處理輸入輸出。有關這方面的信息,你可以參考《Programming in Lua 》一書,你可以在網絡上直接觀看電子版,網址為:http://www.lua.org/pil/index.html

使用例程

1. 函數的使用

以下程序演示了如何在Lua中使用函數, 及局部變量

  1. 例e02.lua  
  2. -- functions   
  3. function pythagorean(a, b)   
  4. local c2 = a^2 + b^2   
  5. return sqrt(c2)   
  6. end   
  7. print(pythagorean(3,4))  
  8. 運行結果  

程序說明

在Lua中函數的定義格式為:

  1. function 函數名(參數)  
  2. ...  
  3. end 

與Pascal語言不同, end不需要與begin配對, 只需要在函數結束后打個end就可以了.本例函數的作用是已知直角三角形直角邊, 求斜邊長度. 參數a,b分別表示直角邊長,在函數內定義了local形變量用于存儲斜邊的平方。

與C語言相同, 定義在函數內的代碼不會被直接執行, 只有主程序調用時才會被執行.local表示定義一個局部變量, 如果不加local剛表示c2為一個全局變量, local的作用域是在最里層的end和其配對的關鍵字之間, 如if ... end, while ... end等。全局變量的作用域是整個程序。

2. 循環語句

  1. 例e03.lua  
  2. -- Loops   
  3. for i=1,5 do   
  4. print("i is now " .. i)   
  5. end 

運行結果

  1. i is now 1   
  2. i is now 2   
  3. i is now 3   
  4. i is now 4   
  5. i is now 5 

程序說明

這里偶們用到了for語句

for 變量 = 參數1, 參數2, 參數3 do

循環體

end

變量將以參數3為步長, 由參數1變化到參數2

例如:

  1. for i=1,f(x) do print(i) end  
  2. for i=10,1,-1 do print(i) end 

這里print("i is now " .. i)中,偶們用到了..,這是用來連接兩個字符串的,偶在(1)的試試看中提到的,不知道你們答對了沒有。

雖然這里i是一個整型量,Lua在處理的時候會自動轉成字符串型,不需偶們費心。

3、條件分支語句

例e04.lua

  1. -- Loops and conditionals   
  2. for i=1,5 do  
  3. print(“i is now “ .. i)  
  4. if i < 2 then   
  5. print(“small”)   
  6. elseif i < 4 then   
  7. print(“medium”)   
  8. else   
  9. print(“big”)   
  10. end   
  11. end 

運行結果

  1. i is now 1   
  2. small   
  3. i is now 2   
  4. medium   
  5. i is now 3   
  6. medium   
  7. i is now 4   
  8. big   
  9. i is now 5   
  10. big 

#p#

程序說明

if else用法比較簡單, 類似于C語言, 不過此處需要注意的是整個if只需要一個end,

哪怕用了多個elseif, 也是一個end.

例如

  1. if op == "+" then  
  2. r = a + b  
  3. elseif op == "-" then  
  4. r = a - b  
  5. elseif op == "*" then  
  6. r = a*b  
  7. elseif op == "/" then  
  8. r = a/b  
  9. else  
  10. error("invalid operation")  
  11. end 

數組的使用

1、簡介

Lua語言只有一種基本數據結構, 那就是table, 所有其他數據結構如數組啦,類啦, 都可以由table實現.

2、table的下標

例e05.lua

  1. -- Arrays   
  2. myData = {}   
  3. myData[0] = “foo”   
  4. myData[1] = 42   
  5. -- Hash tables   
  6. myData[“bar”] = “baz”   
  7. -- Iterate through the   
  8. -- structure   
  9. for key, value in myData do   
  10. print(key .. “=“ .. value)   
  11. end 

輸出結果

  1. 0=foo   
  2. 1=42   
  3. bar=baz 

程序說明

首先定義了一個table myData={}, 然后用數字作為下標賦了兩個值給它. 這種

定義方法類似于C中的數組, 但與數組不同的是, 每個數組元素不需要為相同類型,

就像本例中一個為整型, 一個為字符串.

程序第二部分, 以字符串做為下標, 又向table內增加了一個元素. 這種table非常

像STL里面的map. table下標可以為Lua所支持的任意基本類型, 除了nil值以外.

Lua對Table占用內存的處理是自動的, 如下面這段代碼

  1. a = {}  
  2. a["x"] = 10  
  3. b = a -- `b' refers to the same table as `a'  
  4. print(b["x"]) --> 10  
  5. b["x"] = 20  
  6. print(a["x"]) --> 20  
  7. a = nil -- now only `b' still refers to the table  
  8. b = nil -- now there are no references left to the table 

b和a都指向相同的table, 只占用一塊內存, 當執行到a = nil時, b仍然指向table,

而當執行到b=nil時, 因為沒有指向table的變量了, 所以Lua會自動釋放table所占內存

3、able的嵌套

Table的使用還可以嵌套,如下例

例e06.lua

  1. -- Table ‘constructor’   
  2. myPolygon = {   
  3. color=“blue”,   
  4. thickness=2,   
  5. npoints=4;   
  6. {x=0, y=0},   
  7. {x=-10, y=0},   
  8. {x=-5, y=4},   
  9. {x=0, y=4}   
  10. }  
  11. -- Print the color   
  12. print(myPolygon[“color”])   
  13. -- Print it again using dot   
  14. -- notation   
  15. print(myPolygon.color)   
  16. -- The points are accessible   
  17. -- in myPolygon[1] to myPolygon[4]   
  18. -- Print the second point’s x   
  19. -- coordinate   
  20. print(myPolygon[2].x) 

程序說明

首先建立一個table, 與上一例不同的是,在table的constructor里面有{x=0,y=0},

這是什么意思呢? 這其實就是一個小table, 定義在了大table之內, 小table的

table名省略了.

最后一行myPolygon[2].x,就是大table里面小table的訪問方式.

小結:LUA腳本語言入門之Lua程序設計初步的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 沐楓
相關推薦

2013-12-12 16:30:20

Lua腳本語言

2011-08-22 18:00:53

Lua語言

2011-08-22 16:59:28

Lua

2011-08-25 10:35:14

Lua語言函數

2011-08-25 10:40:21

Lua游戲

2011-08-22 18:08:09

Lua腳本

2011-06-22 14:07:42

Lua

2011-08-25 11:02:04

2011-08-23 09:44:28

LUA腳本

2011-08-25 09:55:27

2011-08-24 13:32:17

2011-08-25 14:26:40

LUA數據文件

2011-08-24 17:05:01

Lua

2009-02-10 09:53:41

多線程程序設計Java

2011-08-25 14:43:55

LUA對象序列化

2011-08-25 13:22:40

CEGUILua腳本

2013-12-12 15:59:23

Lua腳本語言

2011-08-25 10:24:27

Lua

2011-08-25 10:15:02

Lua安裝函數

2013-06-27 09:41:19

LuaLua語言Lua語言快速入門
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费精品久久久久久中文字幕 | 91超碰在线观看 | www.黄色在线观看 | 日本精品一区二区 | 国产精品性做久久久久久 | 久久精品亚洲精品国产欧美kt∨ | 在线观看中文字幕av | 精品一区久久 | 日本手机看片 | 免费v片 | 国产成人免费观看 | 一级片网址 | 青青草社区| 正在播放国产精品 | 男人的天堂亚洲 | 91精品国产综合久久久久久 | 国产免费视频 | 亚洲成人动漫在线观看 | 国产精品久久毛片av大全日韩 | 午夜影院毛片 | 国产精品资源在线 | 国产我和子的乱视频网站 | 欧美久久视频 | 亚洲一区二区三区视频免费观看 | 午夜影院网站 | 日本精品视频在线 | 91精品国产自产精品男人的天堂 | 国产区在线视频 | 久久久久99| 欧美三区 | 亚洲精品中文字幕av | 欧美在线视频一区二区 | 久久成人人人人精品欧 | 国产精品久久欧美久久一区 | 久久久久久高潮国产精品视 | 久久国产精品精品国产色婷婷 | 国产精品一区二区三区久久久 | 精品久久久久国产免费第一页 | 国产视频中文字幕在线观看 | 91九色在线观看 | 99久久精品免费看国产四区 |