變量就是給一塊內(nèi)存區(qū)域賦予的一個(gè)名字。變量使得在程序中就可以修改或讀取相應(yīng)的內(nèi)存區(qū)域中的內(nèi)容。它可以代表各種不同類型的值,包括函數(shù)與表。
變量的名字由字母、數(shù)字與下劃線組成。它必須是字母或下劃線開頭。由于 Lua 是字母大小寫敏感的,所以大寫字母與小寫字母是不一樣的。Lua 中有八種基本值類型:
在 Lua 語言中,雖然我們沒有變量數(shù)據(jù)類型,但是依據(jù)變量的作用域我們可以將變量分為三類:
一個(gè)變量定義就意味著告訴解釋器在什么地方創(chuàng)建多大的一塊存儲(chǔ)空間。一個(gè)變量定義包括一個(gè)可選的類型( type )以及該類型的一個(gè)或多個(gè)變量名的列表,如下所示:
type variable_list;
其中,type 是可以選擇指定為 local 或者不指定使用默認(rèn)值 global,variable_list 是包含一個(gè)或多個(gè)由逗號(hào)分隔的標(biāo)識(shí)符名字。下面是合法變量定義的示例:
local i, j
local i
local a,c
local i,j 聲明定義了兩個(gè)變量 i 與 j;它命令解釋器創(chuàng)建兩個(gè)名稱分別為 i,j 的變量,并且將其作用域限制在局部。
在聲明變量的時(shí)候可以同時(shí)初始化變量(為變量賦初值)。在變量名后跟上等號(hào)和一個(gè)常量表達(dá)式就可以初始化變量。如下所示:
type variable_list = value_list;
一些例子如下:
local d , f = 5 ,10 --聲明局部變量 d,f。
d , f = 5, 10; --聲明全局變量 d,f。
d, f = 10 --[[聲明全局變量 d,f,其中 f 的值是 nil--]]
如果只是定義沒有初始化,則靜態(tài)存儲(chǔ)變量被隱式初始化為 nil。
正如在上面例子看到的那樣,為多個(gè)變量賦值就是在變量列表后跟上值列表。例子 local d,f = 5,10 中,變量列表是 d,f,值列表是 5,10。
Lua 賦值時(shí)會(huì)將第一個(gè)值賦給第一個(gè)變量,第二個(gè)值賦給第二個(gè)變量,依次類推。所以,d 的值是 5,f 的值是 10。
下面的示例中,變量被聲明在頂部,但是它們?cè)谥骱瘮?shù)中定義和初始化:
-- 變量定義:
local a, b
-- 初始化
a = 10
b = 30
print("value of a:", a)
print("value of b:", b)
-- 交換變量的值
b, a = a, b
print("value of a:", a)
print("value of b:", b)
f = 70.0/3.0
print("value of f", f)
上面的代碼被編譯生成和執(zhí)行后,會(huì)產(chǎn)生如下的結(jié)果:
value of a: 10
value of b: 30
value of a: 30
value of b: 10
value of f 23.333333333333
Lua 中有兩種表達(dá)式:
變量屬于左值表達(dá)式,所以它可以現(xiàn)在賦值符號(hào)的左邊。數(shù)值常量屬于右值表達(dá)式,它不能被賦值也不能出現(xiàn)在賦值符號(hào)的左邊。下面是合法的語句:
g = 20
但是,下面的語句是非法的,它會(huì)產(chǎn)生生成時(shí)錯(cuò)誤:
10 = 20
在 Lua 語言中,除了上面講的這種賦值,還允許在一個(gè)賦值語句中存在多個(gè)左值表達(dá)式與多個(gè)右值表達(dá)式。如下所示:
g,l = 20,30
在這個(gè)語句中,g 被賦值為 20,l 被賦值為 30。