1. 程式人生 > >[Unity熱更新]lua常用庫

[Unity熱更新]lua常用庫

參考:

http://www.cnblogs.com/superchao8/archive/2011/06/20/2085023.html

http://blog.csdn.net/goodai007/article/details/8076141

http://www.cnblogs.com/whiteyun/archive/2009/08/10/1543139.html

0.使用Sublime Text3 配置Lua執行環境:

http://blog.csdn.net/albertsh/article/details/52297546

1.string

--string庫中所有的function都不會直接操作原字串,而是複製一份再進行操作

s = "[Abc]"
print(string.len(s))          --5
print(string.rep(s, 2))       --[Abc][Abc]
print(string.lower(s))        --[abc]
print(string.upper(s))        --[ABC]


--string.sub 擷取字串 
--字元索引從前往後是1,2,...;從後往前是-1,-2,...
print(string.sub(s, 2))       --Abc]
print(string.sub(s, -2))      --c]
print(string.sub(s, 2, -2))   --Abc


--string.find(s, pattern, pos) 搜尋字串
--s 源字串 
--pattern 待搜尋的模式串
--pos 從pos位置開始搜尋
--找到則返回開始和結束的位置,否則返回nil
s = "hello world"
print(string.find(s, "hello"))    --1 5
print(string.find(s, "l"))        --3 3
print(string.find(s, "lll"))      --nil

-- . 任意字元
-- %s 空白符
-- %p 標點字元
-- %c 控制字元
-- %d 數字
-- %x 十六進位制數字
-- %z 代表0的字元
-- %a 字母
-- %l 小寫字母
-- %u 大寫字母
-- %w 字母和數字
--上面字元類的大寫形式表示小寫所代表的集合的補集。例如,%A 非字母的字元
s = "Deadline is 30/05/1999, firm"
pattern = "%d%d/%d%d/%d%d%d%d"
pattern2 = "%l.%l%s%l%l%s%d."
print(string.sub(s, string.find(s, pattern)))    --30/05/1999
print(string.sub(s, string.find(s, pattern2)))   --ine is 30

--特殊字元 
--( ) . % + - * ? [ ^ $
--對於特殊字元,可以使用 %特殊字元 的方式進行匹配
--%. 匹配.
--%? 匹配?
--%% 匹配%
s = "[[h7o.W%orld]]"
pattern = "%[h7o%.%u%%"
print(string.sub(s, string.find(s, pattern)))    --[h7o.W%

-- [] 字元集合
-- [%w_]        匹配字母數字和下劃線
-- [01]         匹配二進位制數字
-- [%[%]]       匹配一對方括號
-- [0-9]        相當於%d
-- [0-9a-fA-F]  相當於%x
-- [0-7]        相當於[01234567]

-- 在[]中使用^表示其補集
-- [^0-7]       匹配0到7之外的字元
-- [^\n]        匹配非換行字元
-- [^%s]        匹配%S


-- 以上這些都是正則表示式的內容,更詳細的可以看:
-- http://blog.csdn.net/lyh916/article/details/49201195
-- 只不過在正則表示式中,lua中使用%代表轉義,而java使用\代表轉義


--string.gsub(s, pattern, reps) 替換字串
--s 源字串 
--pattern 待替換的模式串
--pos 替換的內容
--將s中所有符合pattern的字串替換為reps,返回結果串+匹配數
print(string.gsub("hello, world", "o", "a")) --hella, warld	2


--string.gfind(s, pattern)
--返回一個迭代器,迭代器每執行一次,返回下一個匹配串
iter = string.gfind("a=b c=d", "[^%s+]=[^%s+]")
print(iter()) --a=b
print(iter()) --c=d

for s in string.gfind("a=b c=d", "[^%s+]=[^%s+]") do
	print(s)
end


--string.format 按一定格式輸出字串
--%s 字串
--%d int
--%f float
print(string.format("%s add %d = %f", "hello", 2, 3)) --hello add 2 = 3.000000
print(string.format("%05d = %.2f", 20, 3))            --00020 = 3.00


2.math

函式名 描述 示例 結果
pi 圓周率 math.pi 3.1415926535898
abs 取絕對值 math.abs(-2012) 2012
ceil 向上取整 math.ceil(9.1) 10
floor 向下取整 math.floor(9.9) 9
max 取引數最大值 math.max(2,4,6,8) 8
min 取引數最小值 math.min(2,4,6,8) 2
pow 計算x的y次冪 math.pow(2,16) 65536
sqrt 開平方 math.sqrt(65536) 256
mod 取模 math.mod(65535,2) 1
modf 取整數和小數部分 math.modf(20.12) 20   0.12
randomseed 設隨機數種子 math.randomseed(os.time())
random 取隨機數 math.random(5,90) 5~90
rad 角度轉弧度 math.rad(180) 3.1415926535898
deg 弧度轉角度 math.deg(math.pi) 180
exp e的x次方 math.exp(4) 54.598150033144
log 計算x的自然對數 math.log(54.598150033144) 4
log10 計算10為底,x的對數 math.log10(1000) 3
frexp 將引數拆成x * (2 ^ y)的形式 math.frexp(160) 0.625    8
ldexp 計算x * (2 ^ y) math.ldexp(0.625,8) 160
sin 正弦 math.sin(math.rad(30)) 0.5
cos 餘弦 math.cos(math.rad(60)) 0.5
tan 正切 math.tan(math.rad(45)) 1
asin 反正弦 math.deg(math.asin(0.5)) 30
acos 反餘弦 math.deg(math.acos(0.5)) 60
atan 反正切 math.deg(math.atan(1)) 45


3.table

--table.concat(table, sep,  start, end)
--將table中的元素進行連線,僅適用於陣列部分
--sep 連線符
--start 預設值是1
--end 預設值是陣列部分的總長
t = {"q", "w", "e"}
print(table.concat(t, " "))       --q w e

t = {a = "q", b = "w", c = "e"}
print(table.concat(t, " "))       --無輸出

t = {[1] = "q", [2] = "w", c = "e"}
print(table.concat(t, ","))       --q,w


--table.insert(table, pos, value)
--在table的陣列部分指定位置(pos)插入值為value的一個元素. pos引數可選, 預設為陣列部分末尾
t = {"q", "w", "e"}
table.insert(t, "r")
print(table.concat(t, " "))       --q w e r
table.insert(t, 2, "t")
print(table.concat(t, " "))       --q t w e r


--table.remove(table, pos)
--table.remove()函式刪除並返回table陣列部分位於pos位置的元素. 其後的元素會被前移. 
--pos引數可選, 預設為table長度, 即從最後一個元素刪起.


--table.maxn(table)
--table.maxn()函式返回指定table中所有正數key值中最大的key值. 如果不存在key值為正數的元素, 則返回0. 
--此函式不限於table的陣列部分.
t = {[1] = "q", [2] = "w", [3] = "e", [26] = "e", }
print(#t)              --3 因為26和之前的數字不連續, 所以不算在陣列部分內
print(table.maxn(t))   --26
t[91.32] = true
print(table.maxn(t))   --91.32


--table.sort(table, comp)
--table.sort()函式對給定的table進行升序排序.
--comp 接受兩個引數(依次為a, b), 並返回一個布林型的值.如果應該調轉位置,則返回false
t = {"q", "w", "e", }
table.sort(t)
print(table.concat(t, ", "))    --e, q, w
table.sort(t, function (a, b) return a>b end)
print(table.concat(t, ", "))    --w, q, e


--多重排序
guild = {}
table.insert(guild, { name = "Cladhaire", class = "Rogue",   level = 70, })
table.insert(guild, { name = "Sagart",    class = "Priest",  level = 70, })
table.insert(guild, { name = "Mallaithe", class = "Warlock", level = 40, })
--對這個table進行排序時, 應用以下的規則: 按等級升序排序, 在等級相同時, 按姓名升序排序.
function SortFunc(a, b)
	if a.level == b.level then
		return a.name < b.name
	else
		return a.level < b.level
	end
end
table.sort(guild, SortFunc)
for i,v in ipairs(guild) do
	print(i,v.name)
end
-- 1	Mallaithe
-- 2	Cladhaire
-- 3	Sagart