# Lua 變量
變量在使用前,必須在代碼中進行聲明,即創建該變量。編譯程序執行代碼之前編譯器需要知道如何給語句變量開辟存儲區,用于存儲變量的值。
Lua 變量有三種類型:全局變量、局部變量、表中的域。
函數外的變量默認為全局變量,除非用 local 顯示聲明。函數內變量與函數的參數默認為局部變量。
局部變量的作用域為從聲明位置開始到所在語句塊結束(或者是直到下一個同名局部變量的聲明)。
變量的默認值均為 nil。
~~~
~~~
--?test.lua?文件腳本?a?=??5??--??全局變量??local?b?=??5??--??局部變量??function?joke()?c?=??5??--??局部變量??local?d?=??6??--??局部變量??end??print(c,d)??-->??nil??nil??do??local?a?=??6??--??局部變量?b?=??6??--??全局變量??print(a,b);??-->??6??6??end??print(a,b)??-->??5??6
~~~
~~~
執行以上實例輸出結果為:
~~~
~~~
$?lua?test.lua?nil??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[i]'
~~~
~~~
當變量個數和值的個數不一致時,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。
應該盡可能的使用局部變量,有兩個好處:
- 1. 避免命名沖突。
- 2. 訪問局部變量的速度比全局變量更快。
### 索引
對 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
~~~
~~~
- Lua 簡介
- Lua 環境安裝
- Lua 數據類型
- Lua 變量
- Lua 循環
- Lua while 循環
- Lua for 循環
- Lua repeat...until 循環
- Lua 循環嵌套
- Lua break 語句
- Lua 流程控制
- Lua if 語句
- Lua if...else 語句
- Lua if 嵌套語句
- Lua 函數
- Lua 運算符
- Lua 字符串
- Lua 數組
- Lua 迭代器
- Lua table(表)
- Lua 模塊與包
- Lua 元表(Metatable)
- Lua 協同程序(coroutine)
- Lua 文件 I/O
- Lua 錯誤處理
- Lua 調試(Debug)
- Lua 垃圾回收
- Lua 面向對象
- Lua 數據庫訪問
- CoverPage