當前位置:成語大全網 - 書法字典 - LUA語言介紹

LUA語言介紹

LUA腳本語言介紹(純轉帖,僅供參考)

Lua程序的初步設計

作者:沐風(第二人生成員)

版權所有,轉載請註明出處

在這篇文章中,我想介紹如何設計Lua程序。我假設每個人都學過至少壹門編程語言,比如Basic或者C,尤其是C .因為Lua最大的用途是作為宿主程序中的腳本。

Lua的語法相對簡單易學,但功能也不弱。

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

壹、首先,評論。

寫程序的時候,總有註釋。

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

在單行註釋中,兩個連續的減號“-”表示註釋的開始,並壹直延續到行尾。相當於C++語言中的“//”。

在多行註釋中,“-[[”表示註釋開始並持續到“]]”。這種註釋相當於“/*...*/"在C語言中。在註釋中,“[[”和“]]”可以嵌套。

二。Lua編程

經典的“Hello world”節目總是用來介紹壹種語言。在Lua中,編寫這樣的程序很簡單:

打印(“Hello world”)

在Lua中,可以使用分號“;”陳述之間。分開,也可以用空格分開。壹般來說,如果多條語句寫在同壹行,建議總是用分號隔開。

Lua有幾個程序控制語句,比如:

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

While循環:while條件do … end

重復循環:重復…直到條件

For循環:for變量=初始值,結束值,step do … end。

For循環:對於表或枚舉函數中的變量1,變量2,…,變量n do … end。

註意for的循環變量總是只作用於for的局部變量,也可以省略step值。在這種情況下,for的循環將使用1作為步長值。

您可以使用break來停止循環。

如果妳有編程的基礎知識,比如Basic和C,妳會發現Lua並不難。但是Lua和這些編程語言有幾個地方明顯不同,所以請特別註意。

。語句塊

壹個語句塊在C++中用“{”和“}”括起來,在Lua中用do和end括起來。例如:

打印(“妳好”)結束

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

。賦值語句

賦值語句在Lua中得到了加強。它可以同時給多個變量賦值。

例如:

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

甚至:

a,b = b,a-多麽方便的交換變量的函數。

默認情況下,變量總是被認為是全局的。如果要定義局部變量,第壹次賦值時需要使用局部描述。例如:

局部A,B,C = 1,2,3-A,B,C都是局部變量。

。數值運算

和C語言壹樣,支持+,-,*,/。但是Lua多了壹個" "。這意味著指數冪運算。例如,2 ^ 3的結果是8,2 ^ 4的結果是16。

要連接兩個字符串,可以使用“..”接線員。比如:

“這壹個”..“字符串。”——等於“這壹串”

。比較操作

& lt& gt& lt= & gt= == ~=

分別表示小於、大於、不大於、不小於、等於、不等於。

所有這些運算符總是返回true或false。

對於表、函數和用戶數據類型的數據,只能使用= =和~ =兩種類型。相等意味著兩個變量引用相同的數據。例如:

a={1,2}

b=a

print(a==b,a~=b) -真,假

a={1,2}

b={1,2}

print(a==b,a~=b) -假,真

。邏輯運算

和,或者,不是

其中,與和或與C語言有很大不同。

這裏請記住,在Lua中,只有false和nil被計算為false,其他所有數據都被計算為true,0也是true!

and和or的運算結果不是真與假,而是和它的兩個操作數有關。

a和b:如果a為假,則返回a;否則返回b。

a或b:如果a為真,則返回a;否則返回b。

舉幾個例子:

打印(4和5) ->五

print(nil和13) ->無

print(false和13)->;錯誤的

打印(4或5) ->四

print(假或5)-& gt;五

這是Lua中壹個非常有用但又令人困惑的特性。

我們可以模仿C語言中的語句:x = a?B: c,在Lua中,可以寫成:x = a和b或c。

最有用的語句是:x = x或v,相當於:如果不是x那麽x = v結束。

的優先權。運算符,從高到低如下:

^

非-(壹元運算)

* / + -

..(字符串連接)

& lt& gt& lt= & gt= ~= ==

或者

三。關鍵詞

關鍵字不能用作變量。Lua的關鍵詞不多,就以下幾個:

打破其他的自我

函數if結束false

在本地nil not或

重復return然後true直到while

四。變量類型

如何確定壹個變量的類型?可以使用type()函數來檢查。Lua支持以下類型:

空值,所有未使用的變量都是零。Nil既是值也是類型。

布爾布爾值

數值,在Lua中,數值相當於C語言中的double。

字符串String,如果您願意,它可以包含字符' \0 '。

表關系表類型,這個類型比較強大,後面再說。

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

Userdata嗯,這個類型是專門用來對付Lua的主機的。主機通常用C和C++編寫。在這種情況下,Userdata可以是主機的任何數據類型,常用的有Struct和pointer。

Thread線程類型,Lua中沒有真正的線程。Lua可以將壹個函數分成幾個部分來運行。有興趣可以看看Lua的文檔。

變量的定義

所有語言都使用變量。在Lua中,無論在什麽地方使用變量,都不需要聲明,所有這些變量永遠是全局變量,除非妳在前面加上“local”。

這壹點要特別註意,因為妳可能想在函數中使用局部變量,卻忘了用局部來解釋。

至於變量名,是區分大小寫的。換句話說,A和A是兩個不同的變量。

定義變量的方法是賦值。“=”操作用於賦值。

讓我們壹起定義幾種常見的變量類型。

A.無

如前所述,未使用變量的值都為零。有時候我們也需要清除壹個變量。這時我們可以直接給變量賦壹個nil值。比如:

var 1 = nil-請註意nil必須是小寫的。

B.布爾代數學體系的

在進行條件判斷時,通常使用布爾值。布爾值有兩種:真和假。在Lua中,只有false和nil被評估為false,其他所有類型的值都為true。如0、空字符串等。,都是真的。不要被C語言的習慣誤導了,0在Lua裏是真的。您也可以直接將布爾值賦給變量,例如:

varboolean = true

C.數字

在Lua中,沒有整數類型,也不需要。壹般來說,只要數值不是很大(比如不超過100,000,000,000,000,000,000),就不會出現舍入誤差。在很多CPU上,實數的運算並不比整數慢。

實數的表示類似於C語言,比如:

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

D.線

String始終是壹種非常常見的高級類型。在Lua中,可以很容易地定義很長的字符串。

在Lua中有幾種方法來表達壹個字符串。最常見的方法是用雙引號或單引號將字符串括起來,例如:

“這是壹根弦。”

與C語言壹樣,它支持壹些轉義字符,如下所示:

\壹個鈴鐺

\b後退空間

\f換頁

\n換行符

\r回車

\t水平制表符

\v垂直制表符

\\反斜杠

“雙引號

\ '單引號

\[左方括號

\]右方括號

因為這種字符串只能寫壹行,所以不可避免的要使用轉義符。加入了壹串轉義字符,看起來真的很討人喜歡,比如:

"壹行\n下壹行\n\ "引號\ ",'引號'"

大量的“\”符號讓人看著就惡心。如果妳和我有同感,那麽在Lua中,我們可以用另壹種表達式:用“[”和“]]”把多行字符串括起來,比如:

page = [[

& ltHTML & gt

& ltHEAD & gt

& ltTITLE & gt壹個HTML頁面& lt/TITLE & gt;

& lt/HEAD & gt;

& ltBODY & gt

& ltHREF = " http://www . Lua . org " & gt;Lua & lt/A & gt;

[[方括號中的文本]]

& lt/BODY & gt;

& lt/HTML & gt;

]]

值得註意的是,在這類字符串中,如果有單個“[”或“]]”,還是要用“\ [”或“\]”,避免歧義。當然這種情況很少。

E.桌子

關系表類型,這是壹種非常強大的類型。我們可以把這種類型看作壹個數組。只是C語言中的數組,只能用正整數索引;在Lua中,可以使用任何類型來索引數組,除了nil。同樣,在C語言中,數組的內容只允許有壹種類型;在Lua中,還可以使用任何類型的值作為數組的內容,除了nil。

Table的定義很簡單,它的主要特點是用“{”和“}”把壹系列數據元素括起來。例如:

T1 = {} -定義壹個空表。

t 1[1]= 10——那麽我們就可以像C語言壹樣使用它了。

T1["John"]={Age=27,Gender="Male"}

這句話相當於:

t 1[" John "]= { }-必須先將其定義為表。記住,未定義的變量是nil類型的。

T1["約翰"]["年齡"]=27

T1["約翰"]["性別"]= "男性"

當表的索引是壹個字符串時,我們可以將其縮寫為:

T1。約翰={}

T1。約翰。年齡=27歲

T1。約翰。性別= "男性"

或者

T1。約翰{年齡=27歲,性別= "男性" }

這是壹個非常強大的功能。

在定義表的時候,我們可以把所有的數據壹起寫在“{”和“}”之間,非常方便美觀。例如,T1的先前定義可以寫成如下:

T1=

{

10,-相當於[1] = 10。

[100] = 40,

約翰= -如果妳喜歡,妳也可以寫:["約翰"] =

{

年齡=27,-如果妳願意,也可以寫:[“年齡”] =27。

性別=男性——如果妳願意,也可以寫:[“性別”]=男性。

},

20-相當於[2] = 20

}

它看起來很漂亮,不是嗎?當我們寫作時,我們需要註意三點:

第壹,所有的元素總是用逗號“,”隔開;

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

第三,如果不寫索引,索引會被認為是壹個數,從1開始按順序自動編譯;

表類型的構造如此方便,以至於它們經常被用來代替配置文件。是的,毫無疑問,它比ini文件更漂亮,更強大。

F.功能

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

函數Add (a,b)-Add是函數名,A和B是參數名。

Return a+b - return用於返回函數的運行結果。

結束

請註意,返回語言必須在end之前編寫。如果非要在中間放壹個返回句,請寫成:do return end。

記住函數也是變量類型。上述函數定義實際上相當於:

add =函數(a,b)返回a+b結束

當您將值重新分配給add時,它不再代表此功能。您甚至可以將任何數據賦值給add,包括nil(這樣,您就清除了add變量)。函數像不像C語言中的函數指針?

和C語言壹樣,Lua的函數可以接受可變參數,也是用“…”定義的,比如:

函數和(a,b,…)

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

比如sum(1,2,3,4)

然後,在函數中,a = 1,b = 2,arg = {3,4}。

更有價值的是,它可以同時返回多個結果,例如:

函數s()

返回1,2,3,4

結束

a,B,C,D = S()——此時,a = 1,b = 2,c = 3,d = 4。

如前所述,表類型可以有任何類型的值,包括函數!所以,壹個很強大的特點就是,有函數的表,哦,我覺得說對象更合適。Lua可以使用面向對象編程。不信?那我給妳舉以下例子:

t =

{

年齡= 27歲

add =函數(self,n) self。年齡=自身。年齡+n端

}

印刷品(t.Age) - 27

t.add(t,10)

印刷品(t.Age) - 37

不過t.add(t,10)有點土吧?沒關系,在Lua中,妳可以將其縮寫為:

t:add(10)-相當於t.add(t,10)。

G.用戶數據和線程

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

結束語

結束了嗎?當然不是。接下來,妳需要使用Lua解釋器來幫助妳理解和練習。這篇文章只是為了幫助妳對Lua的語法有壹個大致的了解。如果妳有編程基礎,相信妳很快就會習慣Lua。

就像C語言壹樣,Lua提供了相當多的標準函數來增強語言的功能。使用這些標準函數,您可以輕松操作各種數據類型,並處理輸入和輸出。這方面的資料可以參考《Lua中的編程》這本書,在http://www.lua.org/pil/index.html.可以直接在網上看電子版

使用例程

1.功能的使用

下面的程序演示了如何在Lua中使用函數和局部變量。

示例e02.lua

-功能

畢達哥拉斯函數(a,b)

本地c2 = a^2 + b^2

返回sqrt(c2)

結束

print(畢達哥拉斯(3,4))

運行結果

程序說明

Lua中函數的定義格式是:

函數函數名(參數)

...

結束

與Pascal不同,end不需要與begin成對出現,只需在函數末尾鍵入end即可。

這個例子的作用是通過知道直角三角形的直角邊來求斜邊長。參數A和B分別代表直角邊長。

函數中定義了局部變量來存儲斜邊的平方。和C語言壹樣,是在函數中定義的。

代碼不會被直接執行,只有當主程序調用。

局部意味著定義壹個局部變量。如果不加local,只是說明c2是全局變量,局部的範圍。

它位於最內層的末尾和它的成對關鍵字之間,例如if...結束,而...結束等。全局變量

範圍是整個程序。

2.循環語句

示例e03.lua

-循環

因為i=1,5 do

打印(“我就是現在”..我)

結束

運行結果

我現在是1

我現在2歲了

我現在3歲了

我現在4歲了

我現在5歲了

程序說明

這裏我們使用for語句。

For變量=參數1,參數2,參數3 do。

循環體

結束

在參數3的步驟中,變量將從參數1變為參數2。

例如:

對於i=1,f(x)做打印(I)結束

對於i=10,1,-1做打印(I)結束

在這裏打印(“我是現在”..我),我們使用..,用於連接兩個字符串。

無意中看中了(1)裏提到的東西,不知道妳有沒有看錯。

雖然這裏I是壹個整數,但是Lua在處理的時候會自動轉換成壹個字符串,我們就不用費心了。

3.條件轉移語句

示例e04.lua

-循環和條件

因為i=1,5 do

打印(“我就是現在”..我)

如果我& lt2然後

打印(“小”)

elseif i & lt那麽4

打印(“中等”)

其他

打印(“大”)

結束

結束

運行結果

我現在是1

小的

我現在2歲了

媒介

我現在3歲了

媒介

我現在4歲了

大的

我現在5歲了

大的

程序說明

If else使用簡單,類似C語言,但是這裏要註意的是,整個If只需要壹端。

即使使用了壹個以上的elseif,也仍然是目的。

例如

如果op == "+"那麽

r = a + b

elseif op == "-"那麽

r = a - b

elseif op == "* "那麽

r = a*b

elseif op == "/"然後

r = a/b

其他

錯誤(“無效操作”)

結束

數組的使用

1.介紹

Lua語言只有壹個基本的數據結構,就是表,其他都是數組等數據結構。

類,這些都可以用表來實現。

2.2 .表格的下標

示例e05.lua

-數組

我的數據= {}

myData[0] = "foo "

myData[1] = 42

-哈希表

myData["bar"] = "baz "

-循環訪問

-結構

對於鍵,myData中的值

打印(鍵.."=" ..值)

結束

輸出結果

0=foo

1=42

bar=baz

程序說明

首先,定義壹個表myData={},然後用數字作為下標給它賦值。這種。

定義方法類似於C中的數組,但與數組不同的是,每個數組元素不需要屬於同壹類型。

就像這個例子,壹個是整數,壹個是字符串。

在程序的第二部分,字符串被用作下標,壹個元素被添加到表中。這張桌子很漂亮

比如地圖。STL中的表下標,可以是Lua支持的任何基本類型,nil值除外。

Lua自動處理Table占用的內存,如下面的代碼所示。

a = {}

a["x"] = 10

b = a - `b '指與` a '相同的表格

print(b[" x "])-& gt;10

b["x"] = 20

print(a[" x "])-& gt;20

a =零-現在只有“b”仍然指該表

b = nil——現在沒有對表的引用了

b和a都指向同壹個表,只占用壹塊內存。當執行a = nil時,b仍然指向表。

當執行b=nil時,由於沒有指向table的變量,Lua會自動釋放table占用的內存。

3.3的嵌套。桌子

Table的使用也可以是嵌套的,如下例所示。

示例e06.lua

-表“構造函數”

我的多邊形= {

color= "藍色",

厚度=2,

npoints = 4;

{x=0,y=0},

{x=-10,y=0},

{x=-5,y=4},

{x=0,y=4}

}

-打印顏色

print(myPolygon["color"])

-使用dot再次打印

-符號

打印(myPolygon.color)

-這些點是可以訪問的

-在myPolygon[1]到myPolygon[4]中

-打印第二個點的x

坐標

print(myPolygon[2])。x)

程序說明

首先,建立壹個表。與上例不同的是,表的構造函數中有{x=0,y=0}。

這是什麽意思?這實際上是壹個小表,定義在大表內,而小表

省略了表名。

最後壹行,myPolygon[2]。x,是大表中小表的存取方法。