LUA指令碼語言入門

2021-08-30 13:01:34 字數 3682 閱讀 2139

使用例程

1. 函式的使用

以下程式演示了如何在lua中使用函式, 及區域性變數

例e02.lua

-- functions

function pythagorean(a, b)

local c2 = a^2 + b^2

return sqrt(c2)

end

print(pythagorean(3,4))

執行結果

5程式說明

在lua中函式的定義格式為:

function 函式名(引數)

...end

與pascal語言不同, end不需要與begin配對, 只需要在函式結束後打個end就可以了.

本例函式的作用是已知直角三角形直角邊, 求斜邊長度. 引數a,b分別表示直角邊長,

在函式內定義了local形變數用於儲存斜邊的平方. 與c語言相同, 定義在函式內的代

碼不會被直接執行, 只有主程式呼叫時才會被執行.

local表示定義乙個區域性變數, 如果不加local剛表示c2為乙個全域性變數, local的作用域

是在最裡層的end和其配對的關鍵字之間, 如if ... end, while ... end等。全域性變數的

作用域是整個程式。

2. 迴圈語句

例e03.lua

-- loops

for i=1,5 do

print("i is now " .. i)

end執行結果

i is now 1

i is now 2

i is now 3

i is now 4

i is now 5

程式說明

這裡偶們用到了for語句

for 變數 = 引數1, 引數2, 引數3 do

迴圈體end

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

例如:

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

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

這裡print("i is now " .. i)中,偶們用到了..,這是用來連線兩個字串的,

偶在(1)的試試看中提到的,不知道你們答對了沒有。

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

3. 條件分支語句

例e04.lua

-- loops and conditionals

for i=1,5 do

print(「i is now 「 .. i)

if i < 2 then

print(「small」)

elseif i < 4 then

print(「medium」)

else

print(「big」)

end

end執行結果

i is now 1

small

i is now 2

medium

i is now 3

medium

i is now 4

big

i is now 5

big程式說明

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

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

例如if op == "+" then

r = a + b

elseif op == "-" then

r = a - b

elseif op == "*" then

r = a*b

elseif op == "/" then

r = a/b

else

error("invalid operation")

end陣列的使用

1.簡介

lua語言只有一種基本資料結構, 那就是table, 所有其他資料結構如陣列啦,

類啦, 都可以由table實現.

2.table的下標

例e05.lua

-- arrays

mydata = {}

mydata[0] = 「foo」

mydata[1] = 42

-- hash tables

mydata[「bar」] = 「baz」

-- iterate through the

-- structure

for key, value in mydata do

print(key .. 「=「 .. value)

end輸出結果

0=foo

1=42

bar=baz

程式說明

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

定義方法類似於c中的陣列, 但與陣列不同的是, 每個陣列元素不需要為相同型別,

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

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

像stl裡面的map. table下標可以為lua所支援的任意基本型別, 除了nil值以外.

lua對table占用記憶體的處理是自動的, 如下面這段**

a = {}

a["x"] = 10

b = a -- `b' refers to the same table as `a'

print(b["x"]) --> 10

b["x"] = 20

print(a["x"]) --> 20

a = nil -- now only `b' still refers to the table

b = nil -- now there are no references left to the table

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

而當執行到b=nil時, 因為沒有指向table的變數了, 所以lua會自動釋放table所佔記憶體

3.table的巢狀

table的使用還可以巢狀,如下例

例e06.lua

-- table 『constructor』

mypolygon = ,

, , }

-- print the color

print(mypolygon[「color」])

-- print it again using dot

-- notation

print(mypolygon.color)

-- the points are accessible

-- in mypolygon[1] to mypolygon[4]

-- print the second point』s x

-- coordinate

print(mypolygon[2].x)

程式說明

首先建立乙個table, 與上一例不同的是,在table的constructor裡面有,

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

table名省略了.

最後一行mypolygon[2].x,就是大table裡面小table的訪問方式.

五 Lua指令碼語言入門

恢復內容開始 寫完這篇lua指令碼語言入門,自己就要嘗試去用lua指令碼語言寫esp8266了,自己現在挺心急的,因為朋友使用esp8266本來說自己幫忙寫好程式的,但是用的微控制器不一樣自己沒有,沒有辦法測試,用at指令就顯得不方便,還要根據微控制器改程式,而且自己以前用感覺at指令發資訊那塊,麻...

Lua遊戲指令碼語言入門(一)

lua 的語法比較簡單,學習起來也比較省力,但功能卻並不弱。在lua中,一切都是變數,除了關鍵字。請記住這句話。前言.開發環境搭建 lua執行器 i.首先是注釋 寫乙個程式,總是少不了注釋的。在lua中,你可以使用單行注釋和多行注釋。單行注釋中,連續兩個減號 表示注釋的開始,一直延續到行末為止。相當...

Lua指令碼語言參考二

2 語言 這一節從詞法 語法 句法上描述 lua 換句話說,這一節描述了哪些 token 符記 是有效的,它們如何被組合起來,這些組合方式有什麼含義。關於語言的構成概念將用常見的擴充套件 bnf 表示式寫出。也就是這個樣子 意思是 0 或多個 a a 意思是乙個可選的a 非最終的符號會保留原來的樣子...