[Unity熱更新]lua常用庫
阿新 • • 發佈:2019-02-10
參考:
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