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