轉 Lua標準庫: table函式, 數學函式, 字串函式/格式化/配對,

工程師WWW發表於2015-06-15

assert(value) - 檢查一個值是否為非nil, 若不是則(如果在wow.exe開啟除錯命令)顯示對話方塊以及輸出錯誤除錯資訊

collectgarbage() - 垃圾收集器. (新增於1.10.1)

date(format, time) - 返回當前使用者機器上的時間.

error("error message",level) - 發生錯誤時,輸出一條定義的錯誤資訊.使用pcall() (見下面)捕捉錯誤.

gcinfo() - 返回使用中外掛記憶體的佔用量(kb)以及當前垃圾收集器的使用量(kB).

getfenv(function or integer) - 返回此表已獲取函式的堆疊結構或者堆疊等級

getmetatable(obj, mtable) - 獲取當前的元表或者使用者資料物件.

loadstring("Lua code") - 分析字串中的lua程式碼塊並且將結果作為一個函式返回

next(table, index) - 返回下一個key,一對錶值.允許遍歷整個表

pcall(func, arg1, arg2, ...) - 受保護呼叫. 執行函式內容,同時捕獲所有的異常和錯誤.

select(index, list) - 返回選擇此列表中的商品數值.或者是此件物品在列表中的索引值

setfenv(function or integer, table) - 設定此表已獲取函式的堆疊結構或者堆疊等級

setmetatable(obj, mtable) - 設定當前表的元表或者使用者資料物件

time(table) - 返回從一個unix時間值

type(var) - 判斷當前變數的型別, "number", "string", "table", "function" 或者 "userdata".

unpack(table) - 解壓一個表.返回當前表中的所有值.

xpcall(func, err) - 返回一個布林值指示成功執行的函式以及呼叫失敗的錯誤資訊.另外執行函式或者錯誤的返回值

 

table函式庫

一部分的table函式只對其陣列部分產生影響, 而另一部分則對整個table均產生影響. 下面會分開說明. 


table.concat(table, sep,  start, end)

concat是concatenate(連鎖, 連線)的縮寫. table.concat()函式列出引數中指定table的陣列部分從start位置到end位置的所有元素, 元素間以指定的分隔符(sep)隔開.

除了table外, 其他的引數都不是必須的, 分隔符的預設值是空字元, start的預設值是1, end的預設值是陣列部分的總長.

sep, start, end這三個引數是順序讀入的, 所以雖然它們都不是必須引數, 但如果要指定靠後的引數, 必須同時指定前面的引數.

> tbl = {"alpha", "beta", "gamma"}
> print(table.concat(tbl, ":"))
alpha:beta:gamma
> print(table.concat(tbl, nil, 1, 2))
alphabeta
> print(table.concat(tbl, "\n", 2, 3))
beta
gamma


table.insert(table, pos, value)

table.insert()函式在table的陣列部分指定位置(pos)插入值為value的一個元素. pos引數可選, 預設為陣列部分末尾.

> tbl = {"alpha", "beta", "gamma"}
> table.insert(tbl, "delta")
> table.insert(tbl, "epsilon")
> print(table.concat(tbl, ", ")
alpha, beta, gamma, delta, epsilon
> table.insert(tbl, 3, "zeta")
> print(table.concat(tbl, ", ")
alpha, beta, zeta, gamma, delta, epsilon


table.maxn(table)

table.maxn()函式返回指定table中所有正數key值中最大的key值. 如果不存在key值為正數的元素, 則返回0. 此函式不限於table的陣列部分.

> tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}
> print(#tbl)
3               -- 因為26和之前的數字不連續, 所以不算在陣列部分內
> print(table.maxn(tbl))
26
> tbl[91.32] = true
> print(table.maxn(tbl))
91.32


table.remove(table, pos)

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


table.sort(table, comp)

table.sort()函式對給定的table進行升序排序.

> tbl = {"alpha", "beta", "gamma", "delta"}
> table.sort(tbl)
> print(table.concat(tbl, ", "))
alpha, beta, delta, gamma

comp是一個可選的引數, 此引數是一個外部函式, 可以用來自定義sort函式的排序標準.

此函式應滿足以下條件: 接受兩個引數(依次為a, b), 並返回一個布林型的值, 當a應該排在b前面時, 返回true, 反之返回false.

例如, 當我們需要降序排序時, 可以這樣寫:

> sortFunc = function(a, b) return b < a end
> table.sort(tbl, sortFunc)
> print(table.concat(tbl, ", "))
gamma, delta, beta, alpha

用類似的原理還可以寫出更加複雜的排序函式. 例如, 有一個table存有工會三名成員的姓名及等級資訊:

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 sortLevelNameAsc(a, b)
 if a.level == b.level then
  return a.name < b.name
 else
  return a.level < b.level
 end
end

測試功能如下:

> table.sort(guild, sortLevelNameAsc)
> for idx, value in ipairs(guild) do print(idx, value.name) end
1, Mallaithe
2, Cladhaire
3, Sagart

 

數學函式庫

以下是一些常用的Lua標準庫的數學成員, 按字母順序排列.

函式                                                功能

math.abs(x)                                    返回x的絕對值
math.ceil(x)                                     返回不小於x的最小整數
math.deg(x)                                    將弧度制的x轉化為角度
math.exp(x)                                    返回e的x次方
math.floor(x)                                   返回不大於x的最大整數
math.fmod(x, y)                               或x % y, 返回x除以y的餘數
math.log(x)                                     返回x的自然對數值
math.log10(x)                                  返回x的常用對數值
math.max(x, y, z, ...)                       返回引數列表中的最大值
math.min(x, y, z, ...)                        返回引數列表中的最小值
math.modf(x)                                  返回兩個值, 依次為x的整數和小數部分
math.pi                                           圓周率常量
math.pow(x, y)                                計算並返回x的y次方
math.rad(x)                                     將角度制的x轉化為弧度
math.random(m, n)                          產生隨機數, 引數可選並影響範圍: 無引數時為[0, 1), 
                                                      單引數時為[1, m], 雙引數時為[m, n]
math.randomseed(x)                        重設隨機種子
math.sqrt(x)                                    開平方根運算

 

字串函式庫

以下是一些常用的Lua標準庫的字串工具: 

函式                                                功能

string.len(s)                                    返回s的長度
string.lower(s)                                 返回一個s的副本, 其中的所有大寫字母均轉換為小寫
string.rep(s, n)                                返回一個字串, 由n個s頭尾相接而成
string.reverse(s)                              返回一個由s倒轉構成的字串
string.sub(s, i, j)                              返回s的子字串, 從i開始, 到j(可缺, 預設為末尾)結束
                  i, j可以是負值, 此時從字串結尾開始向前計算
                  例如: Hello的-3~-1代表llo子字串
string.upper(s)                                 返回一個s的副本, 其中的所有小寫字母均轉換為大寫

format(formatstring[, value[, ...]]) - 格式化字串

gsub(string,pattern,replacement[, limitCount]) - 全域性替換

strbyte(string[, index]) - 轉換字串為整數值(可以指定某個字元).

strchar(asciiCode[, ...]) - 轉換整數為相對應的字元

strfind(string, pattern[, initpos[, plain]]) - 在一個指定的目標字串中搜尋指定的內容(第三個引數為索引),返回其具體位置.

strlen(string) - 返回當前字串的字元數

strlower(string) - 將字串的字母轉換為小寫格式

strmatch(string, pattern[, initpos]) - 與strfind不同的是,macth返回的是具體值,而find返回的是此值的位置

strrep(seed,count) - 返回一個字串種子副本的個數

strsub(string, index[, endIndex]) - 返回字串指定位置的值.

strupper(string) - 將字串的字母轉為大寫格式

tonumber(arg[, base]) - 若引數能轉為數字則返回一個數值.可以指定轉換的型別.預設為十進位制整數

tostring(arg) - 轉換引數為字串  

字串格式化

Lua提供了string.format()函式來生成具有特定格式的字串, 函式的第一個引數是格式(formatstring), 之後是對應格式中每個代號的各種資料. 由於格式字串的存在, 使得產生的長字串可讀性大大提高了. 這個函式的格式很像C語言中的printf().

格式字串可能包含以下的轉義碼:

%c - 接受一個數字, 並將其轉化為ASCII碼錶中對應的字元
%d, %i - 接受一個數字並將其轉化為有符號的整數格式
%o - 接受一個數字並將其轉化為八進位制數格式
%u - 接受一個數字並將其轉化為無符號整數格式
%x - 接受一個數字並將其轉化為十六進位制數格式, 使用小寫字母
%X - 接受一個數字並將其轉化為十六進位制數格式, 使用大寫字母
%e - 接受一個數字並將其轉化為科學記數法格式, 使用小寫字母e
%E - 接受一個數字並將其轉化為科學記數法格式, 使用大寫字母E
%f - 接受一個數字並將其轉化為浮點數格式
%g(%G) - 接受一個數字並將其轉化為%e(%E, 對應%G)及%f中較短的一種格式
%q - 接受一個字串並將其轉化為可安全被Lua編譯器讀入的格式
%s - 接受一個字串並按照給定的引數格式化該字串

為進一步細化格式, 可以在%號後新增引數. 引數將以如下的順序讀入:

(1) 符號: 一個+號表示其後的數字轉義符將讓正數顯示正號. 預設情況下只有負數顯示符號.
(2) 佔位符: 一個0, 在後面指定了字串寬度時佔位用. 不填時的預設佔位符是空格.
(3) 對齊標識: 在指定了字串寬度時, 預設為右對齊, 增加-號可以改為左對齊.
(4) 寬度數值
(5) 小數位數/字串裁切: 在寬度數值後增加的小數部分n, 若後接f(浮點數轉義符, 如%6.3f)則設定該浮點數的小數只保留n位, 若後接s(字串轉義符, 如%5.3s)則設定該字串只顯示前n位.

在這些引數的後面則是上述所列的轉義碼型別(c, d, i, f, ...).

以下是一些例子:

string.format("%%c: %c", 83)            輸出S
string.format("%+d", 17.0)              輸出+17
string.format("%05d", 17)               輸出00017
string.format("%o", 17)                 輸出21
string.format("%u", 3.14)               輸出3
string.format("%x", 13)                 輸出d
string.format("%X", 13)                 輸出D
string.format("%e", 1000)               輸出1.000000e+03
string.format("%E", 1000)               輸出1.000000E+03
string.format("%6.3f", 13)              輸出13.000
string.format("%q", "One\nTwo")         輸出"One\
                                          Two"
string.format("%s", "monkey")           輸出monkey
string.format("%10s", "monkey")         輸出    monkey
string.format("%5.3s", "monkey")        輸出  mon

在魔獸世界中還有另一個string.format()引數, 允許不按後面的列出順序讀取引數. 在這種情況下, 使用引數的排位+$符號來指定特定的引數.
(此語句在非WoW的Lua編譯器中將不能正確運作. 請使用WoWLua或Lua511WoW)

例如:

> print(string.format("%2$d, %1$d, %d", 13, 17))
17, 13, 13

如果設定了$引數, 其必須緊接在%符號之後, 並且所有的後續引數(在這裡指13, 17)都必須被訪問; 換言之如果有3個引數, 不能只使用1$和3$. 可以混用含有$和不含$的轉義符; 不含$的轉義符將自動從引數列表的頭部開始獲取資料.

$引數在實現本地化中非常方便. 在不同的語言中, 特定的名詞可能會以不同順序出現. 使用帶有$引數的格式字串, 可以使不同語言版本的客戶端共用相同的引數列表.

例如下面這句遊戲提示:

Cladhaire's Shadow Word: Pain is removed.

在德語版客戶端中是這樣寫的:

'Shadow Word: Pain' von Cladhaire wurde entfernt.

在英文版中技能(暗言術·痛)出現在角色名稱(Cladhaire)之後, 但在德語版中順序正相反. 如果引數列表中角色名稱是排在技能名稱之前, 可以為不同的客戶端分別寫出如下的格式字串:

英文版: %s's %s is removed.
德文版: '%2$s' von %1$s wurde entfernt.

這樣只要向string.format()傳入不同的格式字串即可, 不需重寫具有不同引數次序的語句.

 

字串配對

書寫外掛經常會遇到的一個問題是: 如何處理遊戲提供的文字並從中配對獲取所需的資訊. Lua提供了一系列的函式, 這些函式可以根據給定的配對錶達式, 和給定的字串配對, 並處理成功配對的部分.

配對錶達式支援以下的字元類:

單個字元(除^$()%.[]*+-?外): 與該字元自身配對
.(點): 與任何字元配對
%a: 與任何字母配對
%c: 與任何控制符配對(例如\n)
%d: 與任何數字配對
%l: 與任何小寫字母配對
%p: 與任何標點(punctuation)配對
%s: 與空白字元配對
%u: 與任何大寫字母配對
%w: 與任何字母/數字配對
%x: 與任何十六進位制數配對
%z: 與任何代表0的字元配對
%x(此處x是非字母非數字字元): 與字元x配對. 主要用來處理表示式中有功能的字元(^$()%.[]*+-?)的配對問題, 例如%%與%配對
[數個字元類]: 與任何[]中包含的字元類配對. 例如[%w_]與任何字母/數字, 或下劃線符號(_)配對
[^數個字元類]: 與任何包含在[]中的字元類配對. 例如[^%s]與任何非空白字元配對

(還有一個轉義碼是%f. %f被稱作Frontier Pattern, 因為一些原因沒有被寫入Lua的標準文件中. 有興趣的朋友可以看lua-users wiki: Frontier Pattern)

當上述的字元類用大寫書寫時, 表示與此字元類的任何字元配對. 例如, %S表示與任何非空白字元配對.

配對錶達式是由上述字元類代號加上特定選項構成的, 這些特定選項包括:

不加任何選項(例如"%a"): 與單個該類字元配對
後接*號(例如"%a*"): 與0個或更多該類字元配對. 只與給定字串中符合要求的最長子串配對.
後接+號(例如"%a+"): 與1個或更多該類字元配對. 只與給定字串中符合要求的最長子串配對.
後接+號(例如"%a-"): 與0個或更多該類字元配對. 只與給定字串中符合要求的最短子串配對.
後接?號(例如"%a?"): 與0個或1個該類字元配對.

配對錶達式還可包含以下兩個成員:

%bxy: 其中x, y是字元. 與x開始, y結束, 並且x, y在字串中平衡配對的字串配對. 
平衡配對錶示: 設一初始值為零的計數器, 從給定字串左側至右側逐個讀取字元, 每讀取一個x, 計數器+1, 每讀取一個y, 計數器-1, 那麼最後一個y恰好是第一個使計數器歸零的y. 
也可以說, 在%bxy成功配對的字串中, 找不到更短的子字串使其滿足%bxy配對. 
%n: 其中n是1~9的數字. 與捕獲(見下文)的第n個配對字串配對.

例如: 給定字串"abc ABC 123 !@# \n \000 %"

配對錶達式                                    配對結果

%a                          a b c A B C
%a*                         abc ABC
%a+                         abc ABC
%a-%s                       abc ABC
%a?                         a b c A B C
%ba3                        abc ABC 123

在配對錶達式中還可以新增錨點和捕獲標記.

錨點包括^和$符號, ^表示字串起始處, $表示字串結束處. 例如^MYADDON:.+表示以MYADDON:開頭的字串. 

出現在配對錶達式中的成對的圓括號表示捕獲(capture)標記. 每一對圓括號中的表示式成功配對的字串都會被儲存下來, 並且可以用%n獲取(參見前文). 由於圓括號可以巢狀, 因此圓括號的編號順序是以左括號為準的, 按左括號的出現先後順序編號. 例如配對錶達式"(a*(.)%w(%s*))"中, a*(.)%w(%s*)會被存為1號捕捉結果, .和%s*則分別是2號、3號捕捉結果.

以下是一些混合應用各種配對錶達式成員的例子:

表示式               配對結果

%S+                與原字串所有非空白成員配對(即被空格隔開的每個部分)
^MYADDON:(.)       與所有MYADDON:開頭的字串配對, 並且捕獲其後的部分
(%d+%.?%d*)        與所有含有或不含有小數部分的數字配對, 並捕獲整個數字
(%w+)=(%S+)        與所有左側由數字字母組成, 右側由無空格字串組成的等式配對, 
                   並分別捕獲等式的兩側.
%b''               與所有單引號內的字串配對(包括單引號本身)
%S+$               與原字串的最後一個非空白成員配對

利用配對錶達式的主要有以下幾個函式: string.gmatch(str, pattern), string.gsub(str, pattern, repl, n), string.match(str, pattern, init), string.find(str, pattern, init, plain). 為簡化書寫, 也可以用之前在Lua的物件導向提過的方式直接通過字串自身呼叫這些函式(e.g. str:gmatch(pattern)).

string.gmatch(str, pattern)

之前已經提過了, 這是一個返回迭代器的函式. 實際的用例如下:

s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
 print(w)
end

這裡是一個捕獲並將配對字元分別存到不同變數的例子:

t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
 t[k]=v
end
for k, v in pairs(t) do
 print(k, v)
end


string.gsub(str, pattern, repl, n)

string.gsub()函式根據給定的配對錶達式對源字串str進行配對, 同時返回源字串的一個副本, 該副本中成功配對的所有子字串都將被替換. 函式還將返回成功配對的次數.

實際的替換行為由repl引數的型別決定:

當repl為字串時, 所有成功配對的子字串均會被替換成指定的repl字串.
當repl為table時, 對每個成功配對的子字串, 函式均會試圖尋找以其為key值的table中的元素, 並返回該元素. 如果該配對包含任何捕獲資訊, 則以編號為1號的捕獲作為key值進行查詢.
當repl為函式時, 每個成功配對的子字串均會作為引數被傳入到該函式中去.
在repl是table或函式時, 如果該table或函式返回了字串或數字的值, 這個值依然會被用於替換副本字串中的配對子字串. 如果該table/函式返回的值為空, 將不發生替換.

n引數可選, 當它被指定時, string.gsub()函式只對源字串中的前n個成功配對的成員進行操作.

以下是幾個例子:

> print(string.gsub("hello world", "(%w+)", "%1 %1"))
hello hello world world 2

> print(string.gsub("hello Lua", "(%w+)%s*(&w+)", "%2 %1"))
Lua hello 1

> string.gsub("hello world", "%w+", print)
hello world 2

> lookupTable = {["hello"] = "hola", ["world"] = "mundo"}
> print(string.gsub("hello world", "(%w+)", lookupTable))
hola mundo 2


string.match(str, pattern, init)

string.match()只尋找源字串str中的第一個配對. 引數init可選, 指定搜尋過程的起點, 預設為1.

在成功配對時, 函式將返回配對錶達式中的所有捕獲結果; 如果沒有設定捕獲標記, 則返回整個配對字串. 當沒有成功的配對時, 返回nil.


string.find(str, pattern, init, plain)

string.find()尋找源字串str中的第一個成功的配對, 並返回配對子字串的起點和終點位置. 若沒有成功的配對, 則返回nil. 引數init可選, 指定搜尋過程的起點, 預設為1, 可以是負數; plain引數可選, 是個布林值, 預設為false, 如果指定為true, 則pattern被視作普通字串(plain string), 在進行查詢時, 所有其中的轉義符和功能文字全部視作普通文字. 注意如果指定plain, 也必須同時指定init.

如果在配對錶達式中設定了捕獲標記, 函式將在返回兩個位置數值後繼續返回捕獲結果.

 

魔獸世界對Lua新增的函式

以下函式是魔獸世界的外掛介面額外增加的. 普通的Lua編譯器可能不支援這些函式.

strsplit(sep, str)

strsplit()函式按給定的分隔符sep分割源字串str並依序返回分割所得的每個部分. 等同於string.split(sep, str).

> print(strsplit(":", "foo:bar:blah"))
foo bar blah
> print(string.split(" ", "This is a string"))
This is a string

strjoin(sep, ...)

strjoin()函式將後續引數列表的所有字串依次連線起來, 並以分隔符sep兩兩隔開. 等同於string.join(sep, ...).

> print(strjoin(" ", "This", "is", "a", "string"))
This is a string
> print(string.join(", ", "alpha", "beta", "gamma"))
alpha, beta, gamma

strconcat(...)

strconcat()連線引數列表中的所有字串, 並返回連線結果. 等同於string.concat(...).

> print(strconcat("This", "is", "a", "string"))
Thisisastring

getglobal(name)

獲取名字為name的全域性變數的值並返回該值. 在魔獸世界的介面程式設計中, 廣泛地用於處理父框架和子框架共存時的變數問題.

setglobal(name, value)

將名為name的全域性變數的值設為value. 同樣是在預設魔獸介面中被廣泛應用的函式.

debugstack(start, count1, count2)

除錯用函式. 三個引數均是可省略的.

start: 指定堆疊深度, 追蹤過程將從這裡開始(預設為1)
count1: 指定達到棧頂時函式返回的值(預設為12)
count2: 指定達到棧底時函式返回的值(預設為10)

此函式只能在魔獸世界中正常工作. 普通的Lua中有其他用於追蹤堆疊內容的方法.

 

函式別名

在WoW中, 大量常用的庫函式均擁有別名, 以簡化書寫. 以下是所有別名及其對應的函式

別名                  函式                        別名                  函式

abs          math.abs         tan          math.tan
acos         math.acos        format       string.format
asin         math.asin        gmatch       string.gmatch
atan         math.atan        gsub         string.gsub
atan2        math.atan2       strbyte      string.byte
ceil         math.ceil        strchar      string.char
cos          math.cos         strfind      string.find
deg          math.deg         strlen       string.len
exp          math.exp         strlower     string.lower
floor        math.floor       strmatch     string.match
frexp        math.frexp       strrep       string.rep
ldexp        math.ldexp       strrev       string.reverse
log          math.log         strsub       string.sub
max          math.max         strupper     string.upper
min          math.min         foreach      table.foreach
mod          math.fmod        foreachi     table.foreachi
rad          math.rad         getn         table.getn
random       math.random      sort         table.sort
randomseed   math.randomseed  tinsert      table.insert
sin          math.sin         tremove      table.remove
sqrt         math.sqrt

 

表函式
這些表函式同樣可以參考Lua表庫 (他們都是以"table.開頭", 查閱Table庫 f瞭解更多資訊).

也知道, 很多表都被設計為只有數字索引, 開始於1並且沒有結尾(如like {[1] = "foo", [3] = "bar"} --- [2]是不存在的所以為nil值).工作時,與任何其他表並沒有差別,但很可能會產生意想不到的結果. 在編寫lua中, 這個也就是通常所說的bug

foreach(table,function) - 為表中的每個元素執行函式

foreachi(table,function) - 為表中的每個元素執行函式, 按順序訪問(不推薦, 可以使用ipairs代替)

getn(table) - 當作為一個聊表時, 返回當前表的大小. 現在已經廢棄了, 你可以直接使用#符號.使用#(table)代替table.getn(table)

ipairs(table) - 返回一個迭代型整數遍歷表。

pairs(table) - 返回一個迭代遍歷表

sort(table[, comp]) - 對一個陣列進行排序, 還可以指定一個可選的次序函式

tinsert(table[, pos], value) - 將一個元素插入指定的位置(預設在表的最後)

tremove(table[, pos]) - 刪除指定位置的元素(預設表最後一個)

 ------------------------------------------------------------------------------------------------

Lua5.1中數學庫的所有函式如下表:

math.pi 為圓周率常量 = 3.14159265358979323846

abs 

取絕對值

math.abs(-15)

15

acos

反餘弦函式

math.acos(0.5)

1.04719755

asin

反正弦函式

math.asin(0.5)

0.52359877

atan2

x / y的反正切值

math.atan2(90.0, 45.0)

1.10714871

atan

反正切函式

math.atan(0.5)

0.463647609

ceil

不小於x的最大整數

math.ceil(5.8)

6

cosh

雙曲線餘弦函式

math.cosh(0.5)

1.276259652

cos

餘弦函式

math.cos(0.5)

0.87758256

deg

弧度轉角度

math.deg(math.pi)

180

exp

計算以e為底x次方值

math.exp(2)

2.718281828

floor

不大於x的最大整數

math.floor(5.6)

5

fmod (mod)

取模運算

math.mod(14, 5)

4

frexp

把雙精度數val分解為數字部分(尾數)和以2為底的指數n,即val=x*2n

math.frexp(10.0)

0.625    4

ldexp

計算value * 2的n次方

math.ldexp(10.0, 3)

80 = 10 * (2 ^3)

log10

計算以10為基數的對數

math.log10(100)

 

2

log

計算一個數字的自然對數

math.log(2.71)

0.9969

max

取得引數中最大值

math.max(2.71, 100, -98, 23)

100

min

取得引數中最小值

math.min(2.71, 100, -98, 23)

-98

modf

把數分為整數和小數

math.modf(15.98)

15    98

pow

得到x的y次方

math.pow(2, 5)

32

rad

角度轉弧度

math.rad(180)

3.14159265358

random

獲取隨機數

math.random(1, 100)
math.random(100)

獲取1-100的隨機數

randomseed

設定隨機數種子

math.randomseed(os.time())

在使用math.random函式之前必須使用此函式設定隨機數種子

sinh

雙曲線正弦函式

math.sinh(0.5)

0.5210953

sin

正弦函式

math.sin(math.rad(30))

0.5

sqrt

開平方函式

math.sqrt(16)

4

tanh

雙曲線正切函式

math.tanh(0.5)

0.46211715

tan

正切函式

math.tan(0.5)

0.5463024

 

相關文章