Lua 變數
變數在使用前,必需在程式碼中進行聲明給定,即創建該變數。
編譯程序執行程式碼之前,編譯器需要知道如何給宣告變數開闢記憶體儲存區,用於存取變數值。
Lua 變數有三種型態:全域變數、區域變數、表中的值域。
Lua 中的變數全是全域變數,那怕是主程式碼語法中或是函數裡,除非用 local 宣告表明為區域變數。
區域變數的作用區域為從聲明位置開始到所在程式碼區段结束。
變數的默認值均為 nil。
-- test.lua 文件脚本
a = 5 -- 全域變數
local b = 5 -- 區域變數
function joke()
c = 5 -- 全局变量
local d = 6 -- 局部变量
end
joke()
print(c, d) --> 5 nil
do
local a = 6 -- 局域變數
b = 6 -- 全域變數
print(a, b); --> 6 6
end
print(a, b) --> 5 6
執行以上實例輸出结果為:
$ lua test.lua
5
nil
6
6
5
6
賦(給)值語法
赋(給)值是改變一個變量的值和改變表域的最基本的方法。
a = "hello".."world"
t.n = t.n + 1
Lua可以對多個變量同時赋值,變量列表和值列表的各個元素用逗號分開,赋值語句右邊的值會依次赋(給)值给左邊的變量。
a, b = 10, 2*x <--> a = 10; b = 2*x
遇到賦值語句Lua會先計算右邊所有的值然後再執行赋(給)值操作,所以我們可以這樣進行交換變數的值:
x, y = y, x -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i] -- swap 'a[i]' for 'a[j]'
當變量個數和值的個數不一致時,Lua會一直以變數個數為基礎採取以下策略:
a. 變數個数 > 值的個数 按變數個數補足nil
b. 變數個数 < 值的個数 多於的值會被忽略
例如:
a, b, c = 0, 1
print(a, b, c) --> 0 1 nil
a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a, b) --> 1 2
a, b, c = 0
print(a, b, c) --> 0 nil nil
上面最後一個例子是一個常見的錯誤情况,注意:如果要對多個變數賦(給)值必需依次對每個變數賦(給)值。
a, b, c = 0, 0, 0
print(a, b, c) --> 0 0 0
多值賦(給)值經常用来交換變數,或將函數使用返回给變數值:
a, b = f()
f()返回兩個值,第一个賦给a,第二个賦给b。
應該盡可能的使用區域變數,有兩個好處:
避免命名衝突。
訪問局部變數的速度比全域變數更快。
索引
對 table 的索引使用中括號 []。Lua 也提供了 . 操作。
t[i]
t.i -- 當索引為字符/字串類型時的一種簡化寫法
gettable_event(t, i) -- 採用索引訪問本值上是一個類似這樣的函數調用
例如:
> site = {}
> site["key"] = "www.w3cschool.cc"
>print(site["key"])
www.w3cschool.cc
>print(site.key)
www.w3cschool.cc