Lua5.3手册标准库拾遗
復習一遍云風大佬的Lua 5.3參考手冊 中標準庫內容
6.0獨立版Lua
arg
lua 會將所有命令行傳入的參數放到一張全局表 arg 中。 腳本的名字放在索引 0 的地方, 腳本名后緊跟的第一個參數在索引 1 處,依次類推。 在腳本名前面的任何參數 (即解釋器的名字以及各選項) 放在負索引處。
6.1基礎函數
next(table,[,index])
特別指出,你可以用 next(t) 來判斷一張表是否是空的。
索引在遍歷過程中的次序無定義, 即使是數字索引也是這樣。 (如果想按數字次序遍歷表,可以使用數字形式的 for 。)
select(index,...)
如果 index 是個數字, 那么返回參數中第 index 個之后的部分; 負的數字會從后向前索引(-1 指最后一個參數)。 否則,index 必須是字符串 "#", 此時 select 返回參數的個數。
6.3模塊
pack.config
一個描述有一些為包管理準備的編譯期配置信息的串。 這個字符串由一系列行構成:
第一行是目錄分割串。 對于 Windows 默認是 '' ,對于其它系統是 '/' 。
第二行是用于路徑中的分割符。默認值是 ';' 。
第三行是用于標記模板替換點的字符串。 默認是 '?' 。
第四行是在 Windows 中將被替換成執行程序所在目錄的路徑的字符串。 默認是 '!' 。
第五行是一個記號,該記號之后的所有文本將在構建 luaopen_ 函數名時被忽略掉。 默認是 '-'。
6.4字符串處理
string.find (s, pattern [, init [, plain]])
可選參數 plain 為 true 時, 關閉模式匹配機制。 此時函數僅做直接的 “查找子串”的操作, 而 pattern 中沒有字符被看作魔法字符。 注意,如果給定了 plain ,就必須寫上 init 。
如果在模式中定義了捕獲,捕獲到的若干值也會在兩個索引之后返回。
string.gsub (s, pattern, repl [, n])
如果 repl 是一個字符串,那么把這個字符串作為替換品。 字符 % 是一個轉義符: repl 中的所有形式為 %d 的串表示 第 d 個捕獲到的子串,d 可以是 1 到 9 。 串 %0 表示整個匹配。 串 %% 表示單個 %。
如果 repl 是張表,每次匹配時都會用第一個捕獲物作為鍵去查這張表。
如果 repl 是個函數,則在每次匹配發生時都會調用這個函數。 所有捕獲到的子串依次作為參數傳入。
string.len (s)
接收一個字符串,返回其長度。 空串 "" 的長度為 0 。 內嵌零也統計在內,因此 "a\000bc\000" 的長度為 5
string.rep (s, n [, sep])
返回 n 個字符串 s 以字符串 sep 為分割符連在一起的字符串。 默認的 sep 值為空字符串(即沒有分割符)。 如果 n 不是正數則返回空串。
6.4.1 匹配模式
Lua 中的匹配模式直接用常規的字符串來描述。 它用于模式匹配函數 string.find, string.gmatch, string.gsub, string.match。 這一節表述了這些字符串的語法及含義(即它能匹配到什么)。
字符類:
字符類 用于表示一個字符集合。 下列組合可用于字符類:
- x: (這里 x 不能是 魔法字符 ^$()%.[]*+-? 中的一員) 表示字符 x 自身。
- .: (一個點)可表示任何字符。
- %a:表示任何字母。(alphabet)
- %c: 表示任何控制字符。(control character)
- %d: 表示任何數字。(decimal)
- %g: 表示任何除空白符外的可打印字符。
- %l: 表示所有小寫字母。(lowercase)
- %p: 表示所有標點符號。(punctuation)
- %s: 表示所有空白字符。(space)
- %u: 表示所有大寫字母。(uppercase)
- %w: 表示所有字母及數字。
- %x: 表示所有 16 進制數字符號。
- %z: 表示空字符('\000')
- %x: (這里的 x 是任意非字母或數字的字符) 表示字符 x。 這是對魔法字符轉義的標準方法。 所有非字母或數字的字符 (包括所有標點,也包括非魔法字符) 都可以用前置一個 '%' 放在模式串中表示自身。
[set]: 表示 set 中所有字符的聯合。 可以以 '-' 連接,升序書寫范圍兩端的字符來表示一個范圍的字符集。 上面提到的 %x 形式也可以在 set 中使用 表示其中的一個元素。 其它出現在 set 中的字符則代表它們自己。 例如,[%w_] (或 [_%w]) 表示所有的字母數字加下劃線), [0-7] 表示 8 進制數字, [0-7%l%-] 表示 8 進制數字加小寫字母與 '-' 字符。
交叉使用類和范圍的行為未定義。 因此,像 [%a-z] 或 [a-%%] 這樣的模式串沒有意義。
所有單個字母表示的類別(%a,%c,等), 若將其字母改為大寫,均表示對應的補集。 例如,%S 表示所有非空格的字符。
如何定義字母、空格、或是其他字符組取決于當前的區域設置。 特別注意:[a-z] 未必等價于 %l 。
模式條目:
模式條目 可以是
- 單個字符類匹配該類別中任意單個字符;
- 單個字符類跟一個 '*', 將匹配零或多個該類的字符。 這個條目總是匹配盡可能長的串;
- 單個字符類跟一個 '+', 將匹配一或更多個該類的字符。 這個條目總是匹配盡可能長的串;
- 單個字符類跟一個 '-', 將匹配零或更多個該類的字符。 和 '*' 不同, 這個條目總是匹配盡可能短的串;
- 單個字符類跟一個 '?', 將匹配零或一個該類的字符。 只要有可能,它會匹配一個;
- %n, 這里的 n 可以從 1 到 9; 這個條目匹配一個等于 n 號捕獲物(后面有描述)的子串。
- %bxy, 這里的 x 和 y 是兩個明確的字符; 這個條目匹配以 x 開始 y 結束, 且其中 x 和 y 保持 平衡 的字符串。 意思是,如果從左到右讀這個字符串,對每次讀到一個 x 就 +1 ,讀到一個 y 就 -1, 最終結束處的那個 y 是第一個記數到 0 的 y。 舉個例子,條目 %b() 可以匹配到括號平衡的表達式。
%f[set], 指 邊境模式; 這個條目會匹配到一個位于 set 內某個字符之前的一個空串, 且這個位置的前一個字符不屬于 set 。 集合 set 的含義如前面所述。 匹配出的那個空串之開始和結束點的計算就看成該處有個字符 '\0' 一樣。
邊界模式含義在于檢測從不在集合中到在集合中的過渡來表明匹配范圍.
例如下面的匹配:
string.gsub ("THE (QUICK) brOWN FOx JUMPS", "%f[%a]%u+%f[%A]", print)THE QUICK JUMPS模式:
模式 指一個模式條目的序列。 在模式最前面加上符號 '^' 將錨定從字符串的開始處做匹配。 在模式最后面加上符號 '$' 將使匹配過程錨定到字符串的結尾。 如果 '^' 和 '$' 出現在其它位置,它們均沒有特殊含義,只表示自身。
捕獲:
模式可以在內部用小括號括起一個子模式; 這些子模式被稱為 捕獲物。 當匹配成功時,由 捕獲物 匹配到的字符串中的子串被保存起來用于未來的用途。 捕獲物以它們左括號的次序來編號。 例如,對于模式 "(a(.)%w(%s))" , 字符串中匹配到 "a(.)%w(%s)" 的部分保存在第一個捕獲物中 (因此是編號 1 ); 由 "." 匹配到的字符是 2 號捕獲物, 匹配到 "%s*" 的那部分是 3 號。
作為一個特例,空的捕獲 () 將捕獲到當前字符串的位置(它是一個數字)。 例如,如果將模式 "()aa()" 作用到字符串 "flaaap" 上,將產生兩個捕獲物: 3 和 5 。
6.5 UTF-8支持
utf8.charpattern
用于精確匹配到一個 UTF-8 字節序列的模式(是一個字符串,并非函數)"[\0-\x7F\xC2-\xF4][\x80-\xBF]*" (參見 §6.4.1)。 它假定處理的對象是一個合法的 UTF-8 字符串。
6.6 表處理
table.move (a1, f, e, t [,a2])
將元素從表 a1 移到表 a2。 這個函數做了次等價于后面這個多重賦值的等價操作: a2[t],··· = a1[f],···,a1[e]。 a2 的默認值為 a1。 目標區間可以和源區間重疊。 索引 f 必須是正數。
a1-- 原表
f -- from index
e -- end index
t -- to index
a2 -- 目標表
move 是a1的值復制到a2里面去,并不會移除原來a1里的值.
table.pack (···)
返回用所有參數以鍵 1,2, 等填充的新表, 并將 "n" 這個域設為參數的總數。 注意這張返回的表不一定是一個序列。
table.pack(nil,2,3,4) -- 返回的就不是序列table.sort (list [, comp])
排序算法并不穩定; 即當兩個元素次序相等時,它們在排序后的相對位置可能會改變。
6.7 數學庫
math.modf (x)
返回 x 的整數部分和小數部分。 第二個結果一定是浮點數。
math.type (x)
如果 x 是整數,返回 "integer", 如果它是浮點數,返回 "float", 如果 x 不是數字,返回 nil。
6.8 輸入輸出庫
I/O 庫提供了兩套不同風格的文件處理接口。 第一種風格使用隱式的文件句柄; 它提供設置默認輸入文件及默認輸出文件的操作, 所有的輸入輸出操作都針對這些默認文件。 第二種風格使用顯式的文件句柄。
當使用隱式文件句柄時, 所有的操作都由表 io 提供。 若使用顯式文件句柄, io.open 會返回一個文件句柄,且所有的操作都由該文件句柄的方法來提供。
表 io 中也提供了三個 和 C 中含義相同的預定義文件句柄: io.stdin, io.stdout, 以及 io.stderr。 I/O 庫永遠不會關閉這些文件。
除非另有說明, I/O 函數在出錯時都返回 nil (第二個返回值為錯誤消息,第三個返回值為系統相關的錯誤碼)。 成功時返回與 nil 不同的值。 在非 POSIX 系統上, 根據錯誤碼取出錯誤消息的過程可能并非線程安全的, 因為這使用了 C 的全局變量 errno 。
io.open (filename [, mode])
這個函數用字符串 mode 指定的模式打開一個文件。 返回新的文件句柄。 當出錯時,返回 nil 加錯誤消息。
mode 字符串可以是下列任意值:
"r": 讀模式(默認);
"w": 寫模式;
"a": 追加模式;
"r+": 更新模式,所有之前的數據都保留;
"w+": 更新模式,所有之前的數據都刪除;
"a+": 追加更新模式,所有之前的數據都保留,只允許在文件尾部做寫入。
mode 字符串可以在最后加一個 'b' , 這會在某些系統上以二進制方式打開文件。
io.popen (prog [, mode])
這個函數和系統有關,不是所有的平臺都提供。
用一個分離進程開啟程序 prog, 返回的文件句柄可用于從這個程序中讀取數據 (如果 mode 為 "r",這是默認值) 或是向這個程序寫入輸入(當 mode 為 "w" 時)
用這個可以執行些腳本命令并返回結果
io.tmpfile ()
如果成功,返回一個臨時文件的句柄。 這個文件以更新模式打開,在程序結束時會自動刪除。
io.type (obj)
檢查 obj 是否是合法的文件句柄。 如果 obj 它是一個打開的文件句柄,返回字符串 "file"。 如果 obj 是一個關閉的文件句柄,返回字符串 "closed file"。 如果 obj 不是文件句柄,返回 nil 。
file:read (···)
讀文件 file, 指定的格式決定了要讀什么。 對于每種格式,函數返回讀出的字符對應的字符串或數字。 若不能以該格式對應讀出數據則返回 nil。 (對于最后這種情況, 函數不會讀出后續的格式。) 當調用時不傳格式,它會使用默認格式讀下一行(見下面描述)。
提供的格式有
- "n": 讀取一個數字,根據 Lua 的轉換文法,可能返回浮點數或整數。 (數字可以有前置或后置的空格,以及符號。) 只要能構成合法的數字,這個格式總是去讀盡量長的串; 如果讀出來的前綴無法構成合法的數字 (比如空串,"0x" 或 "3.4e-"), 就中止函數運行,返回 nil。
- "a": 從當前位置開始讀取整個文件。 如果已在文件末尾,返回空串。
- "l": 讀取一行并忽略行結束標記。 當在文件末尾時,返回 nil 這是默認格式。
- "L": 讀取一行并保留行結束標記(如果有的話), 當在文件末尾時,返回 nil。
- number: 讀取一個不超過這個數量字節數的字符串。 當在文件末尾時,返回 nil。 如果 number 為零, 它什么也不讀,返回一個空串。 當在文件末尾時,返回 nil。
格式 "l" 和 "L" 只能用于文本文件。
file:seek ([whence [, offset]])
設置及獲取基于文件開頭處計算出的位置。 設置的位置由 offset 和 whence 字符串 whence 指定的基點決定。基點可以是:
- "set": 基點為 0 (文件開頭);
- "cur": 基點為當前位置;
- "end": 基點為文件尾;
當 seek 成功時,返回最終從文件開頭計算起的文件的位置。 當 seek 失敗時,返回 nil 加上一個錯誤描述字符串。
whence 的默認值是 "cur", offset 默認為 0 。 因此,調用 file:seek() 可以返回文件當前位置,并不改變它; 調用 file:seek("set") 將位置設為文件開頭(并返回 0); 調用 file:seek("end") 將位置設到文件末尾,并返回文件大小。
file:setvbuf (mode [, size])
設置輸出文件的緩沖模式。 有三種模式:
- "no": 不緩沖;輸出操作立刻生效。
- "full": 完全緩沖;只有在緩存滿或當你顯式的對文件調用 flush(參見 io.flush) 時才真正做輸出操作。
- "line": 行緩沖; 輸出將緩沖到每次換行前, 對于某些特殊文件(例如終端設備)緩沖到任何輸入前。
對于后兩種情況,size 以字節數為單位 指定緩沖區大小。 默認會有一個恰當的大小。
操作系統庫
os.getenv (varname)
返回進程環境變量 varname 的值, 如果該變量未定義,返回 nil 。
轉載于:https://www.cnblogs.com/Fallever/p/11110584.html
總結
以上是生活随笔為你收集整理的Lua5.3手册标准库拾遗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Slackware网卡配置文件和配置工具
- 下一篇: HTML连载18-id选择器与class