當前位置:編程學習大全網 - 編程語言 - 熱愛編程和安裝

熱愛編程和安裝

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。

字符串字符串,如果願意,可以包含“”字符。

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

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

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語言壹樣,它支持壹些轉義字符,如下所示:

壹個鈴鐺

退位

f形進給

新行

回車

橫表

垂直制表符

\反斜杠

“雙引號

單引號

[左方括號

]右方括號

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

“壹行

下壹行

“在引號中”,“在引號中”

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

page = [[

& ltHTML & gt

& ltHEAD & gt

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

& lt/HEAD & gt;

& ltBODY & gt

& ltA HREF="http://www.lua.org

本頁面不屬於NGA網站,NGA不保證其安全性。

繼續訪問和取消。不要再提示我[http://www.lua.org]" > 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.可以直接在網上看電子版

本頁面不屬於NGA網站,NGA不保證其安全性。

繼續訪問和取消。不要再提醒我[http://www.lua.org/pil/index.html]

當然,Lua最強大的功能是與宿主程序的緊密配合。因此,在下壹篇文章中,我會告訴妳如何在妳的程序中使用Lua語言作為腳本,使妳的程序與Lua腳本進行交互。

BBS.NGACN.COM

[瑤瑤]

豬小小2005-06-29 14:11

級別:老兵

帖子:721

聲望:13

財富:13

使用過程

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

其他

錯誤(“無效操作”)

結束

4.試壹試

除了for循環之外,Lua還支持多種循環。請用while重寫本文中的for程序...做並重復...直到。

BBS.NGACN.COM

[瑤瑤]

【二樓】小豬小2005-06-29 14:20

級別:老兵

帖子:721

聲望:13

財富:13

數組的使用

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,是大表中小表的存取方法。

BBS.NGACN.COM

[瑤瑤]

【三樓】yhcs 2005-06-29 14:25

級別:警告級別2

職位:89

聲望:-9

這個應該是頂級的,很好的收藏!

【四樓】豬小2005-06-29 14:38

級別:老兵

帖子:721

聲望:13

財富:13

還有壹些其他的高級寫作素材,但是在魔獸限定255字的條件下,估計用不到。所以這裏就不貼了。

BBS.NGACN.COM

[瑤瑤]

加繆2005-06-29 21:52

級別:思域

帖子:171

聲望:1

財富:1

變量的問題:

(1)lua好像不需要聲明變量,妳只需要給妳想用的變量賦值就可以了。根據賦值的類型,變量被自動鍵入。是這樣嗎?(當然,下面的文章中會提到這個例子:雖然這裏I是整數,但是Lua在處理的時候會自動將其轉換成字符串類型,我們不用擔心。-_-)

(2)

文章說:如果要定義局部變量,第壹次賦值時需要使用局部描述。

所以我寫宏的時候經常直接賦值,比如mp = unitmana(" player ")/unitmanamax(" player "),所以這個MP就成了全局變量?

+++++++++++++++++++++++

邏輯運算的問題

(2)壹般在寫宏的時候,and和or都有比較運算,所以這裏直接對兩個值進行邏輯運算有點別扭也是可以理解的。

比如第壹句不清楚,有false和nil的就清楚了,因為給出了規則。樓主能解釋壹下嗎?

(3)

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

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

這個規則怎麽解釋,還是說lua是這樣規定的?沒有任何解釋。

++++++++++++++++++++

結構問題

(4)如果如果...然後....文章中提到了elseif。....

但是現在寫宏的時候,很多人都像if壹樣嵌套...然後...如果...然後...如果...符合標準嗎?

++++++++++++++++++

最後感謝樓主提供的好文章。

BBS.NGACN.COM

我很想妳,這是真的,,,

【六樓】豬小2005-06-30 01:39

級別:老兵

帖子:721

聲望:13

財富:13

1,是的,所有未聲明的變量都是全局的。。。。甚至是妳在函數中定義的變量。我做過實驗,比如在宏中定義壹個變量A,賦給1。運行後,如果變量A也在另壹個宏中使用,如果在宏中調用它而沒有重新賦值,A的值仍然是妳之前使用的宏中賦給1的值。

但壹般不用擔心沖突,因為在大多數情況下,大多數人會習慣在宏中重新賦值壹個新變量,壹般不會造成太大問題。但是如果妳真的需要壹些全局變量,並且可以很容易的識別出來,妳可以在宏中用小寫字母表示局部變量,用大寫字母表示全局變量,因為Lua是嚴格區分大小寫的,所以妳可以很容易的使用局部變量和全局變量。

2,3,這個有點混亂。。。我這麽解釋吧。其實妳說的比較運算是邏輯運算,都是壹樣的。只是Lua擴展了and和or的使用。

其實通常and和or只能用布爾值,它們能得到的結果也只有布爾。也就是and和or只能對false和true進行運算,結果也不是false就是true。操作如下所示:

真假=假真假=假

假與假=假真與真=真

假或真=真真或假=真

假或假=假真或真=真

但是Lua擴展了and和or可以操作的數據類型,這樣它們也可以操作其他類型的數據。所以才有了這個方便的定義(當然妳可以說混淆定義)

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

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

現在我們可以嘗試用false和true替換A和B操作:

a =假b =真

真假=假

假或真=真

a =真b =假

真假=假

真或假=真

a =假b =假

假與假=假

假或假=假

a =真b =真

真實和真實=真實

真或真=真

看到了吧,其實結果和我們之前正常的邏輯運算是壹樣的。Lua只是and和or的擴展範圍。由於Lua對數據類型的定義沒有嚴格的要求,所以她的操作很方便,可以適應各種類型的數據。(其實不是解釋。她就是這麽定義的。方便或者混亂只是壹個想法,哈哈)

3,當然符合標準,嵌套屬於嵌套的用法,elseif屬於elseif。這兩種用法是不同的,雖然結果可能是壹樣的。但在某些情況下,嵌套方便就用嵌套,elseif方便。

BBS.NGACN.COM

[瑤瑤]

[7樓]陽光明媚的夏日

級別:警告級別1

帖子:481

聲望:-3

瘋狂。。。。。。。。。。。。。。。。。。。只有電腦高手才能玩這個遊戲嗎?

BBS.NGACN.COM

三個願望:【第七區無卡】【跨服戰場無排隊】【9城待定】

[8樓]深圳沙龍2005-06-30 09: 47

級別:思域

職位:44

聲望:0

以下引自《陽光夏日》發表於2005年6月30日07: 12:

瘋狂。。。。。。。。。。。。。。。。。。。只有電腦高手才能玩這個遊戲嗎?

wow的本質就是保證不同的人都能找到自己的樂趣。

電腦專家可能沒有泡菜的鍵盤熟練,泡菜也可能不知道插件和宏並不妨礙自己的樂趣~

只要手表幹擾別人~

暴雪是壹群天才,我崇拜了10年:P

樓主是高手,難得這麽有耐心,PFPF~

本來想發自己的集成插件效果圖,但是懶得找圖片空間。以後吧~

我用了大腳怪+Flexbar+Titan+Gather+super macro+Lax+移動任何東西+...

昨天大腳怪更新,不小心開了壹個新功能。被告知界面用了20M多內存,被迫退出遊戲~

@ @我到現在都在流汗~ ~ ~

此外,使用SuperMacro插件可以將宏腳本的最長字節增加到1023。

允許將快捷鍵直接綁定到宏(而不是拖到動作欄再綁定),允許使用其他宏的名字。

調用其他宏。安裝後即可使用。可以解決小MM說的字節限制問題。

[本帖由szsharo於2005年7月24日10: 00編輯]

BBS.NGACN.COM

術士是壹個優雅高貴的職業,尤其是帥氣的矮人術士~:P

【9樓】最接近上帝的牛2005-06-30 10:35

級別:思域

發布:5

聲望:1

財富:1

品格高尚的人

  • 上一篇:2012湖南高考招生簡章:邵陽職業技術學院
  • 下一篇:智能家居能源管理系統有哪些好處?
  • copyright 2024編程學習大全網