lua是一種動態型別語言。沒有型別定義的語法。每個值都攜帶了它自身的型別資訊。
8種基礎型別:nil(空) boolean(布林) number(數字)
string(字串) userdata(自定義型別) function(函式)
thread(執行緒) table(表)
函式type可 根據乙個值返回其型別名稱。
print(type("hello world")) -->string
print(type(type)) -->function
print(type(nil)) -->nil
變數沒有預定義型別,任何變數都可以包含任何型別的值
a = print
a(type(a)) -->function
在lua中,函式是作為「第一類值(first-class value)」來看待的,可以像操作其他值一樣來操作函式值
nil(空)
nil是乙個型別,它只有乙個值nil。它的主要功能是用於區別其他任何值。
boolean(布林)
true,false。lua將nil和false視作「假」,其他情況均為「真」
number(數字)
number型別用於表示實數。lua沒有整數型別,因為沒有必要。事實上,只要使用雙精度來表示乙個整數,就不會出現「四捨五入(rounding)」的錯誤。
string(字串)
lua完全採用8位編碼,lua字串中的字元可以具有任何數值編碼,包括數值0。
lua中的字串是不可變的值。所以沒有字串變數一說。要改變字串值只能建立乙個新字串。
字面字串(literal string)需要以一對匹配的單引號或雙引號來界定:
a = "a line"
b = 'another line'
lua字串中可以有類c語言中的轉義序列。如:\n,\r等。
可以通過數值來指定字串中的字元,數值以轉義序列「\」給出,是乙個至多3個十進位制數字組成的序列。
「alo\n123\"」 == '\97lo\10\04923"'
ascii 編碼中,'a'是97,換行是10,『1』是49。
一對匹配的雙括號來界定乙個字母字串,就像寫塊注釋一樣。lua不會解釋其中的轉義序列。如果字串的第乙個字元是換行字元,lua會忽略它。
page = [[
]] [[之中還可以加任意數量的==,兩邊許匹配==數量
[===[ ]===]
--[==[ --]==]
lua提供了執行時的數字和字串的自動轉換。
print("10" + 1 ) -->11
print("hello" + 1) --錯誤
同樣,在lua期望乙個字串但卻得到乙個數字時,它也會將 數字轉換成字串。
print(10 .. 20) -->1020
..(兩個點)是字串連線符,當直接在乙個數字後面輸入它時,必須使用乙個空格來分割它們。不然,lua會將第乙個點理解為乙個小數點。
比較運算子10=="10"總為false。
如果需要顯示地將字串轉換為數字,可以使用函式tonumber。如果字串的內容不能表示乙個正確的數字時,tonumber將返回nil。
若要將-個數字轉換成字串,可以呼叫函式tostring,或者將該數字與乙個空字串連線。
print(tostring(10) == "10") -->true
print(10 .. "" == "10") -->true
在lua5.1中,可以在字串前放置操作符「#」來獲得該字串的長度。#號被稱作「長度操作符」
a = "hello"
print(#a) -->5
table(表)
table型別實現了「關聯陣列」。關聯陣列是一種具有特殊索引方式的陣列。不僅僅可以通過整數來索引它,還可以使用字串或者其他型別的值(除了nil)來索引它。table沒有固定的大小,可以動態地新增任意數量的元素到乙個table中。lua也是通過table來表示模組(module)、包(package)和物件(object)的。當輸入io.read的時候,其含義是「io」模組中的read函式。對於lua而言,這表示「使用字串「read」作為key(鍵)來索引table io」
table既不是「值」也不是「變數」,而是「物件」。
table的建立是通過「構造表示式」完成的,最簡單的構造表示式是{}。
a = {} --建立乙個table,並將它的引用儲存到a
k = "x"
a[k] = 10 --新條目,key="x",value=10
a[20] = "great" --新條目,key=20,value="great"
print(a["x"]) -->10
k = 20
print(a[k]) --> "great"
a["x"] = a["x"] + 1 --遞增條目"x"
print(a["x"]) -->11
table永遠是匿名的,乙個持有table的變數與table自身之間沒有固定的關聯性。
a = {}
a["x"] = 10或者a.x = 10
b = a --b與a引用了同乙個table
print(b["x"])或者print(b.x) -->10
b["x"] = 20
print(a["x"]) -->20
a = nil --現在只有b還在引用table
b = nil --再也沒用對table的引用了
lua中的陣列表示:
a = {}
for i = 1,10 do
a[i] = io.read()
end就lua的習慣而言,陣列通常以1作為索引的初始值。並且有不少機制依賴於這個慣例。
在lua5.1中,長度操作符「#」用於返回乙個陣列或線性表的最後乙個索引值(或為其大小)。
--列印所有的行
for i =1,#a do
print(a[i])
endprint(a[#a]) --列印列表a的最後乙個值
a[#a] = nil --刪除最後乙個值
a[#a + 1] = v --將v新增到列表末尾
陣列大小的概念是模糊的,因為陣列實際上是table。
對於所有未初始化的元素的索引結果都是nil。lua將nil作為界定陣列結尾的標誌。當乙個陣列有空隙時,即中間存在nil時,長度操作符會認為這些nil元素就是結尾標記,因此應該避免對那些含有空隙的陣列使用長度操作符#。如果真的需要處理那些含有「空隙」的陣列,可以使用函式table.maxn(lua5.1新函式),它將返回乙個table的最大正索引數。
a = {}
a[10000] = 10
print(table.maxn(a)) -->10000
i = 10;j = "10"; k = "+10"
a = {}
a[i] = "one value"
a[j] = "another value"
a[k] = "yet another value"
print(a.j) -->"another value"
print(a.k) -->"yet another value"
print(a[tonumber(j)]) -->"one value"
print(a[tonumber(k)]) -->"one value"
function(函式)
函式是作為「第一類值」來看待的。就和其他普通型別一樣。可以儲存在變數中,可以作為函式引數傳遞,可以作為函式返回值返回。
userdata(自定義型別)和thread(執行緒)
由於userdata型別可以將任意的c語言資料儲存到lua變數中。在lua中,這種型別沒有太多的預定義操作,只能進行賦值和相等性測試。
第二課 安裝PHP
為什麼要安裝php?php是伺服器端解析程式,一般執行在網路伺服器上。而編寫php語言的程式我們一般是在自己的個人電腦上完成,然後拿到伺服器上除錯。所以,學習php首先要讓我們的個人電腦模擬伺服器執行環境,讓php能象在伺服器上一樣在我們的個人電腦上執行。這就是為什麼要安裝配置php的原因。安裝配置...
csdn之旅 第二課
1.html標題的標籤 1 注意 只能到,在往後就沒有作用了。2 標籤特點 可以區別其他文字,比如可以加粗 效果圖如 笑對生活!笑對生活!笑對生活!笑對生活!改變字型大小 可以自動換行 2.html段落標記 用元素 注意 標籤和標籤之間的關係 可以巢狀使用 但不可以交叉 3.html常用標記 單標記...
第二課 加法運算
在程式設計當中,文字框及按鈕是用得比較多的乙個控制項,我們先來學學如何使用這兩個控制項。1 新建乙個窗體 2 在窗體上放置三個文字框控制項,分別命名為 txtnum1 txtnum2 txtnum3,我們在命名時,盡量規範一點,可參考這裡 3 在窗體上放置乙個按鈕,命名為cmdcount 開始程式設...