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

results matching ""

    No results matching ""