天天看點

lua學習筆記01

這是筆者學習《Lua中文教程》所寫的筆記,So,筆記中的例子在《Lua中文教程》中都能找到。

我安裝的是LuaForWindows,用的IDE是其自帶的SciTE。

1.HelloWorld

哈哈。HellWorld,從C到Java再到C++第一個例子都是HelloWorld,今天照樣用HelloWorld的例子打開Lua的大門。

你隻要在SciTE中建立一個檔案,儲存檔案到自己需要的目錄輸入一行代碼:

Print(“Hello World”)--這裡加不加’;’都可以

這樣就可以儲存了。OK,點選運作。

如果,不用IDE運作,在cmd中運作也是可以的,找到你的檔案目錄 prompt lua xxx.lua

就OK了。

2.輸出一個數的階乘

指定一個數,輸出這個數的階乘。

這就是一個簡單的遞歸。

-- defindes a factorial function
function fact (n)
	if n == 0 then
		return 1
	else
		print(n)
		return n * fact(n - 1)
	end
end

print("enter a number:")
a = io.read("*number") --read a number
print(fact(a))
           

3.全局變量:全局變量不需要聲明,給一個變量指派後即建立了這個全局變量,通路一個沒有初始化的變量也不會出錯,隻不過得到的結果是:nil。代碼:test3.lua

如果你想删除一個變量,那麼,需要指派為nil,這樣這個變量就好像沒有使用過一樣。換句話說,當且僅當一個變量不為nil時,這個變量存在。

print(b)
b = 10
print(b)
b = nil
print(b)
           

4.詞法約定:辨別符最好不要使用下劃線加大寫字母,因為,lua的保留字也是這樣的。

保留字啥的就不說了,看了看應該沒有重名的可能性。

注意:Lua是大小寫敏感的。

注釋:單行注釋--

          多行注釋--[[   ]]--

類型和值

Lua是動态類型語言,變量不要類型定義。Lua中有8個基本類型分别為:nil,boolean,number,string,userdata,function,thread和table。函數type可以測試給定變量或者值的類型。

print(type("Hello world"))
print(type(10.4 * 3))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))
print(type(type(x)))
print(type(a))
a = 10
print(type(a))
a = "a string"
print(type(a))
a = print                       --還能這麼用,感覺好酷啊
a(type(a))
           

Nil:

Lua中的特殊類型,他隻有一個值:nill,一個全局變量沒有被指派前預設值為nil,給全局變量賦nil可以删除該變量。

Boolean:

True,false

Numbers:

表示實數,Lua中沒有整數。

Strings:

指字元串的序列,Lua是8位位元組,是以,字元串可以包含任何數值字元,包括嵌入的0。這意味着你可以存儲任意的二進制資料在一個字元串中。Lua中的字元串是不可以被修改的,你可以建立一個新的變量存放你要的字元串。

a = "one string"
b = string.gsub(a,"one","another")
print(a)
print(b)

c = "aaaabbbbcccddddeeeefffeeee"
d = string.gsub(c,"e","g")
e = string.gsub(c,"aa","A")
f = string.gsub(c,"aaa","K")
g = "--太神奇了!!!"
print(c)
print(d)
print(e)
print(f)
print(g
           

Lua中的字元串可以使用雙引号或者單引号表示,最好使用其中的一種。String可以是一個字母也可以是一本書,Lua可以高效的處理字元串。1M的字元串在Lua中是很常見的。

運作時Lua會自動在string和numbers之間自動轉換,當一個字元串使用算數操作符是,string就會被轉成數字。..是Lua中的字元串連接配接符,當在一個數字後面寫時,必須加上空格以防止被解釋錯。

print("10" + 1)
print("10 + 1")
--print("-5.3e - 10" * "2")--Error
--print("hello" + 1)--Error
print(10 .. 20)
           

管字元串和數字可以互相轉化,但兩者是不同的,像10 == “10”這樣的比較永遠是錯的。如果需要顯示的将string轉成數字可以用函數tonumber(),如果string不是正确的數字,該函數将傳回nil。tostring()函數可以将數字轉成字元串。

line = io.read()
n = tonumber(line)
if n == nil then
	error(line .. " is not a valid number")
else
	print(n * 2)
end

a = 10
b = tostring(a)
--c = toboolean(a)
print(type(b))
           

Functions

函數是第一類值(和其他變量相同),意味着函數可以存儲在變量中,可以作為函數的參數,也可以作為函數的傳回值。

Userdata and Threads

Userdata可以将C資料存放在Lua變量中,userdata在Lua中除了指派和相等比較外沒有預定義的操作。Userdata用來描述應用程式或者使用C實作的庫建立的新類型。

繼續閱讀