lua學習之語句篇

2022-07-05 14:36:13 字數 4100 閱讀 7811

修改乙個變數或者修改 table 中的乙個欄位的值

多重賦值,lua 先對等號右邊的所有元素進行求值,然後再賦值

值的個數小於變數的個數,那麼多餘的變數就置為 nil

初始化變數,應該為每乙個變數賦乙個初始值

收集函式的多個返回值

x,y = y,x --變數交換

a[i], a[j] = a[j], a[i]

-- 值的個數小於變數的個數

x, y, z = 1, 5 -- z = nil

x, y = 1, 5, 8 -- x = 1, y = 5

local 建立區域性變數

區域性變數作用域僅限於宣告他們的

乙個就是乙個控制結構的執行體,或函式的執行體,或程式塊

x = 10

local i = 1

while i < x do

local x = i * 2

print(x) -- 2, 4, 6 ...

i = i + 1

endprint(x) -- 10

if i > 20 then

local x

x = 20

print(x + 2) -- 22

else

print(x) -- 10

endprint(x) -- 10

互動模式將每一行理解為乙個程式塊,並立即執行,可能結果會不同

顯式的界定乙個塊

do

-- code block

end

盡量使用區域性變數

訪問區域性變數要快於全域性變數

避免汙染全域性環境

區域性變數通常會隨這其作用域的失效而消失,便於垃圾收集器釋放

lua 將區域性變數的宣告當作語句處理,可在任何允許輸入語句的情況下,輸入區域性變數的宣告

所宣告的區域性變數的作用域從宣告語句開始直至所在塊的結束

宣告可包含初始化賦值

多重賦值時,額外的值會被丟棄,額外的變數置為 nil

沒有被賦值的會被置為 nil

-- 習慣寫法

local foo = foo -- 全域性變數 foo 的值賦給區域性變數 foo, 用來儲存全域性變數的值

if, elseif, for, while 顯式的終止符為 end

repeat 顯式的終止符為 until

控制結構中的條件表示式可以是任何值

if

if 條件表示式 then else end

if a < 0 then

a = 0

endif a < b then

return a

else

return b

end-- lua 不支援 switch

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

while

測試 while 條件,如果為,迴圈就結束

否則就執行迴圈體並重複這一過程

local i = 1

while a[i] do

print(a[i])

i = i + 1

end

repeat...until

一直執行迴圈體,直到條件為時結束

repeat

line = io.read()

until line ~= ""

在 lua 中乙個宣告

在迴圈體中區域性變數的作用域包含了條件測試

-- 這在 lua 中是可以執行的

local sqr = x / 2

repeat

sqr = (sqr + x / sqr) / 2

local error = math.abs(sqr ^ 2 - x)

until error < x / 10000

數值型 for

變數 var 從 exp1 變化到 exp2 ,每次變化以 exp3 為步長(遞增並執行一次執行體)

exp 是可選的,預設為 1

for var = exp1, exp2, exp3 do

-- 執行體

endfor i = 10, 1, -1 do

print(i) -- 10, 9, 8,...

end

for 的細節

迴圈的三個表示式是在迴圈開始前一次性求值的

控制變數會被自動的宣告為 for 語句的區域性變數,並在迴圈體內可見

控制變數在迴圈結束後就不存在了

如果需要在迴圈結束後訪問控制變數,必須將控制變數的值儲存在另乙個變數中

不要在迴圈過程中修改控制變數的值

可使用 break 語句在 for 正常結束前提前結束它

泛型 for

通過迭代器函式遍歷所有的值

ipairs() 用來遍歷陣列

在每次迴圈中 i 都會被賦予乙個新的索引值,v 會被賦予乙個對應於該索引的元素值

for i,v in ipairs(a) do

print(v)

end-- 列印 table 中的 key 值

for k, in pairs(t) do

print(k)

end

二種 for 型別的共同點

迴圈變數都是迴圈體的區域性變數

不應該對迴圈變數進行賦值

days = 

-- 將名稱轉換成它在一周中的位置,索引為字串,值為對應的位置,方便查詢,逆向 table

revdays =

x = "tuesday"

print(revdays[x]) -- 3 列印 tuesday 的位置

revdays = {}

for k,v in pairs(days) do

revdays[v] = k

end

都用於跳出當前塊

break 用於結束乙個迴圈,只會跳出包含它的內層迴圈,而不會跳出外層迴圈

執行 break 後,會在跳出的外層迴圈中繼續執行

return 用於函式返回結果或簡單的結束函式的執行

任何函式的結尾處實際上都有一句隱式的 return

如果函式沒有值需要返回的話,需要在其結尾處新增 return 語句

break 和 return 只能是乙個塊的最後一條語句(應該是程式塊的最後一條語句如:end, else, until 前的一條語句)

因為 return 或 break 後的語句將無法執行到

local i = 1

while a[i] do

if a[i] == v then

break -- 條件語句塊中的最後一條語句

endi = i + 1

end

Lua學習之8 控制語句

控制結構的條件表示式結果可以是任何值,lua認為false和nil為假,其他值為真。if conditions then then part end if conditions then then part else else part end if conditions then then par...

Lua之基礎篇

新到一家公司,接觸有些業務竟然直接通過伺服器,在nginx層面就完成了,主要是基於openresty和lua來實現的。打算深入了解一下這門神奇的語言。為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。安裝1 mac brew install lua 開發工具 vscode emmylu...

lua學習之表示式篇

表示式用於表達值 lua 中表示式可以為數字常量,自變字串,變數,一元和二元操作符,函式呼叫 函式定義 table 構造式 一元操作符 用於負號 用於減法 x 0.5 x 1 3 x 的三次方再求導 10 3 1 餘數計算 x 1 得到的是 x 的小數部分 x x 1 得到的是 x 的整數部分 x ...