使用例程
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 非最終的符號會保留原來的樣子...