看了《Programming in lua》、整理一下比較有用的東西、不想再翻電子書了、麻煩、雖說不是很厚、只有280多頁、只是沒實體書、還是比較尷尬的、純粹為了以後查資料方便吧
首先記住一句話、在Lua中、一切都是變數、除了關鍵字
所有的語言、都要用到變數。在Lua中、不管你在什麼地方使用變數,都不需要聲明,並且所有的這些變數總是全域變數,除非,你在前面加上"local"、這一點要特別注意、因為你可能想在函數裡使用局部變數、卻忘了用local來說明
至於變數名、它跟c語言一樣、大小寫也是敏感的、
定義一個變數的方法就是賦值、"="操作就是用來賦值的
我們一起來定義幾種常用類型的變數吧、
怎麼確定一個變數是什麼類型的呢?可以用type()函數來檢查、
type("helloworld") --string型
Lua支援的類型有以下幾種:
A. Nil
正如前面所說的、沒有使用過的變數的值、都是Nil、有時候我們也需要將一個變數清除、這時候、我們可以直接給變數賦以nil值、
local Var = nil -- 請注意nil一定要小寫
B. Boolean
布爾值有兩種:true和false、在Lua中,只有false和nil才被計算為false、而所有任何其它類型的值、都是true。比如0、Null 字元串等、都是true、不要被C語言的習慣所誤導、0在Lua中就是true、
bVar = true
C. Number
在Lua中、數值相當於C語言的double、可表示任何32位整數
在Lua中、是沒有整數類型的、也不需要、一般情況下,只要數值不是很大、是不會產生舍入誤差的、表示方法同C語言類似、如:
4 0.4 4.57e-3 0.3e12 5e+20
D. String
字串在Lua中有幾種方法來表、最通用的方法、是用雙引號或單引號來括起一個字串的,如:
"This is a string."
不過在Lua中不能像c語言中那樣直接修改字串的某個字元、而是根據修改來建立一個新的字串、比如:
a = "one string"
b = string.gsub(a, "one", "another") -- change string parts
print(a) --> one string
print(b) --> another string
和C語言相同的,它支援一些逸出字元,列表如下:
\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\[ left square bracket
\] right square bracket
E. Table
關係表類型、這是一個很強大的類型、我們可以把這個類型看作是一個數組、只是C語言的數組只能用正整數來作索引、在Lua、你可以用任意類型來作數組的索引、除了nil、同樣、在C語言中、數組的內容只允許一種類型、在Lua中、你也可以用任意類型的值來作數組的內容、除了nil
Table的定義很簡單,它的主要特徵是用"{"和"}"來括起一系列資料元素的。比如:
T1 = {} -- 定義一個空表
T1[1]=10 -- 然後我們就可以象C語言一樣來使用它了、
再如:
T1["John"]={Age=27, Gender="Male"}
這一句相當於:
T1["John"]={}
T1["John"]["Age"]=27
T1["John"]["Gender"]="Male"
當表的索引是字串的時候,我們可以簡寫成:
T1.John={}
T1.John.Age=27
T1.John.Gender="Male"
或
T1.John{Age=27, Gender="Male"}
這是一個很強的特性、反正按自己的習慣來寫、怎麼習慣、怎麼舒服怎麼來
在定義表的時候,我們可以把所有的資料內容一起寫在"{"和"}"之間,這樣子是非常方便,而且很好看。比如,前面的T1的定義,我們可以這麼寫:
T1=
{
10, -- 相當於 [1] = 10
[100] = 40,
John= -- 如果你原意,你還可以寫成:["John"] =
{
Age=27, -- 如果你原意,你還可以寫成:["Age"] =27
Gender=Male -- 如果你原意,你還可以寫成:["Gender"] =Male
},
20 -- 相當於 [2] = 20
}
需要注意三點:
第一,所有元素之間、總是用逗號","隔開;
第二,所有索引值都需要用"["和"]"括起來;如果是字串,還可以去掉引號和中括弧;
第三,如果不寫索引、則索引就會被認為是數字、並按順序自動從1往後編
F. Function
函數,在Lua中,函數的定義也很簡單。典型的定義如下:
function add(a,b) -- add 是函數名字,a和b是參數名字
return a+b -- return 用來返回函數的運行結果
end
函數其實也是一種變數類型嗎、上面的函數定義、其實相當於:
add = function (a,b) return a+b end
當你重新給add賦值時、它就不再表示這個函數了、所以、你的變數名是不能取跟函數名一樣的、你甚至可以賦給add任意資料、包括nil、
和C語言一樣、Lua的函數可以接受可變參數個數、它同樣是用"…"來定義的、比如:
function sum (a,b,…)
如果想取得…所代表的參數,可以在函數中訪問arg局部變數(表類型)得到。
如 sum(1,2,3,4)
則,在函數中,a = 1, b = 2, arg = {3, 4}
更牛逼的是、它可以同時返回多個結果、比如:
function s()
return 1,2,3,4
end
a,b,c,d = s() -- 此時,a = 1, b = 2, c = 3, d = 4
前面說過、表類型可以擁有任意類型的值、包括函數!因此,有一個很強大的特性是、擁有函數的表、Lua可以使用物件導向編程了、
t =
{
Age = 27
add = function(self, n) self.Age = self.Age+n end
}
print(t.Age) -- 27
t.add(t, 10)
print(t.Age) -- 37
t.add(t,10) 這一句實在是有點土對吧?沒關係、在Lua中、你可以簡寫成:
t:add(10) -- 相當於 t.add(t,10)
參考文獻:《Programming in lua》