freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

lua51參考手冊(cè)-資料下載頁(yè)

2025-06-07 07:36本頁(yè)面
  

【正文】 awget(table, key) if v ~= nil then return v end h = metatable(table).__index if h == nil then return nil end else h = metatable(table).__index if h == nil then error()。 end end if type(h) == function then return h(table, key) 調(diào)用處理器 else return h[key] 或是重復(fù)上述操作 end end newindex: 賦值給指定下標(biāo) table[key] = value 。 function settable_event (table, key, value) local h if type(table) == table then local v = rawget(table, key) if v ~= nil then rawset(table, key, value)。 return end h = metatable(table).__newindex if h == nil then rawset(table, key, value)。 return end else h = metatable(table).__newindex if h == nil then error()。 end end if type(h) == function then return h(table, key,value) 調(diào)用處理器 else h[key] = value 或是重復(fù)上述操作 end end call: 當(dāng) Lua 調(diào)用一個(gè)值時(shí)調(diào)用。 function function_event (func, ...) if type(func) == function then return func(...) 原生的調(diào)用 else local h = metatable(func).__call if h then return h(func, ...) else error() end end end 環(huán)境類型為 thread ,function ,以及 userdata 的對(duì)象,除了 metatable 外還可以用另外一個(gè)與之關(guān)聯(lián)的被稱作它們的環(huán)境的一個(gè)表,像 metatable 一樣,環(huán)境也是一個(gè)常規(guī)的 table ,多個(gè)對(duì)象可以共享同一個(gè)環(huán)境。 userdata 的環(huán)境在 Lua 中沒(méi)有意義。這個(gè)東西只是為了在程序員想把一個(gè)表關(guān)聯(lián)到一個(gè) userdata 上時(shí)提供便利。 關(guān)聯(lián)在線程上的環(huán)境被稱作全局環(huán)境。全局環(huán)境被用作它其中的線程以及線程創(chuàng)建的非嵌套函數(shù)(通過(guò) loadfile , loadstring 或是 load )的缺省環(huán)境。而且它可以被 C 代碼直接訪問(wèn)(參見(jiàn) 167。)。 關(guān)聯(lián)在 C 函數(shù)上的環(huán)境可以直接被 C 代碼訪問(wèn)(參見(jiàn) 167。)。它們會(huì)作為這個(gè) C 函數(shù)中創(chuàng)建的其它函數(shù)的缺省環(huán)境。 關(guān)聯(lián)在 Lua 函數(shù)上的環(huán)境用來(lái)接管在函數(shù)內(nèi)對(duì)全局變量(參見(jiàn) 167。)的所有訪問(wèn)。它們也會(huì)作為這個(gè)函數(shù)內(nèi)創(chuàng)建的其它函數(shù)的缺省環(huán)境。 你可以通過(guò)調(diào)用 setfenv 來(lái)改變一個(gè) Lua 函數(shù)或是正在運(yùn)行中的線程的環(huán)境。而想操控其它對(duì)象(userdata、C 函數(shù)、其它線程)的環(huán)境的話,就必須使用 C API 。 垃圾收集Lua 提供了一個(gè)自動(dòng)的內(nèi)存管理。這就是說(shuō)你不需要關(guān)心創(chuàng)建新對(duì)象的分配內(nèi)存操作,也不需要在這些對(duì)象不再需要時(shí)的主動(dòng)釋放內(nèi)存。 Lua 通過(guò)運(yùn)行一個(gè)垃圾收集器來(lái)自動(dòng)管理內(nèi)存,以此一遍又一遍的回收死掉的對(duì)象(這是指 Lua 中不再訪問(wèn)的到的對(duì)象)占用的內(nèi)存。 Lua 中所有對(duì)象都被自動(dòng)管理,包括: table, userdata、 函數(shù)、線程、和字符串。 Lua 實(shí)現(xiàn)了一個(gè)增量標(biāo)記清除的收集器。它用兩個(gè)數(shù)字來(lái)控制垃圾收集周期: garbagecollector pause 和 garbagecollector step multiplier 。 garbagecollector pause 控制了收集器在開(kāi)始一個(gè)新的收集周期之前要等待多久。隨著數(shù)字的增大就導(dǎo)致收集器工作工作的不那么主動(dòng)。小于 1 的值意味著收集器在新的周期開(kāi)始時(shí)不再等待。當(dāng)值為 2 的時(shí)候意味著在總使用內(nèi)存數(shù)量達(dá)到原來(lái)的兩倍時(shí)再開(kāi)啟新的周期。 step multiplier 控制了收集器相對(duì)內(nèi)存分配的速度。更大的數(shù)字將導(dǎo)致收集器工作的更主動(dòng)的同時(shí),也使每步收集的尺寸增加。小于 1 的值會(huì)使收集器工作的非常慢,可能導(dǎo)致收集器永遠(yuǎn)都結(jié)束不了當(dāng)前周期。缺省值為 2 ,這意味著收集器將以內(nèi)存分配器的兩倍速運(yùn)行。 你可以通過(guò)在 C 中調(diào)用 lua_gc 或是在 Lua 中調(diào)用 collectgarbage 來(lái)改變這些數(shù)字。兩者都接受百分比數(shù)值(因此傳入?yún)?shù) 100 意味著實(shí)際值 1 )。通過(guò)這些函數(shù),你也可以直接控制收集器(例如,停止或是重啟)。 垃圾收集的元方法使用 C API ,你可以給 userdata (參見(jiàn) 167。)設(shè)置一個(gè)垃圾收集的元方法。這個(gè)元方法也被稱為結(jié)束子。結(jié)束子允許你用額外的資源管理器和 Lua 的內(nèi)存管理器協(xié)同工作(比如關(guān)閉文件、網(wǎng)絡(luò)連接、或是數(shù)據(jù)庫(kù)連接,也可以說(shuō)釋放你自己的內(nèi)存)。 一個(gè) userdata 可被回收,若它的 metatable 中有 __gc 這個(gè)域 ,垃圾收集器就不立即收回它。取而代之的是,Lua 把它們放到一個(gè)列表中。最收集結(jié)束后,Lua 針對(duì)列表中的每個(gè) userdata 執(zhí)行了下面這個(gè)函數(shù)的等價(jià)操作: function gc_event (udata) local h = metatable(udata).__gc if h then h(udata) end end在每個(gè)垃圾收集周期的結(jié)尾,每個(gè)在當(dāng)前周期被收集起來(lái)的 userdata 的結(jié)束子會(huì)以它們構(gòu)造時(shí)的逆序依次調(diào)用。也就是說(shuō),收集列表中,最后一個(gè)在程序中被創(chuàng)建的 userdata 的結(jié)束子會(huì)被第一個(gè)調(diào)用。 Weak Table(弱表)weak table 是一個(gè)這樣的 table,它其中的元素都被弱引用。弱引用將被垃圾收集器忽略掉,換句話說(shuō),如果對(duì)一個(gè)對(duì)象的引用只有弱引用,垃圾收集器將回收這個(gè)對(duì)象。 weak table 的鍵和值都可以是 weak 的。如果一個(gè) table 只有鍵是 weak 的,那么將運(yùn)行收集器回收它們的鍵,但是會(huì)阻止回收器回收對(duì)應(yīng)的值。而一個(gè) table 的鍵和值都是 weak 時(shí),就即允許收集器回收鍵又允許收回值。任何情況下,如果鍵和值中任一個(gè)被回收了,整個(gè)鍵值對(duì)就會(huì)從 table 中拿掉。 table 的 weak 特性可以通過(guò)在它的 metatable 中設(shè)置 __mode 域來(lái)改變。如果 __mode 域中是一個(gè)包含有字符 39。k39。 的字符串時(shí), table 的鍵就是 weak 的。如果 __mode 域中是一個(gè)包含有字符 39。v39。 的字符串時(shí), table 的值就是 weak 的。 在你把一個(gè) table 當(dāng)作一個(gè) metatable 使用之后,就不能再修改 __mode 域的值。否則,受這個(gè) metatable 控制的 table 的 weak 行為就成了未定義的。 Coroutine (協(xié)同例程)Lua 支持 coroutine ,這個(gè)東西也被稱為協(xié)同式多線程 (collaborative multithreading) 。 Lua 為每個(gè) coroutine 提供一個(gè)獨(dú)立的運(yùn)行線路。然而和多線程系統(tǒng)中的線程不同,coroutine 只在顯式的調(diào)用了 yield 函數(shù)時(shí)才會(huì)掛起。 創(chuàng)建一個(gè) coroutine 需要調(diào)用一次 。它只接收單個(gè)參數(shù),這個(gè)參數(shù)是 coroutine 的主函數(shù)。 create 函數(shù)僅僅創(chuàng)建一個(gè)新的 coroutine 然后返回它的控制器(一個(gè)類型為 thread 的對(duì)象);它并不會(huì)啟動(dòng) coroutine 的運(yùn)行。 當(dāng)你第一次調(diào)用 時(shí),所需傳入的第一個(gè)參數(shù)就是 的返回值。這時(shí),coroutine 從主函數(shù)的第一行開(kāi)始運(yùn)行。接下來(lái)傳入 的參數(shù)將被傳進(jìn) coroutine 的主函數(shù)。在 coroutine 開(kāi)始運(yùn)行后,它講運(yùn)行到自身終止或是遇到一個(gè) yields 。 coroutine 可以通過(guò)兩種方式來(lái)終止運(yùn)行:一種是正常退出,指它的主函數(shù)返回(最后一條指令被運(yùn)行后,無(wú)論有沒(méi)有顯式的返回指令)。 另一種是非正常退出,它發(fā)生在未保護(hù)的錯(cuò)誤發(fā)生的時(shí)候。第一種情況中, 返回 true ,接下來(lái)會(huì)跟著 coroutine 主函數(shù)的一系列返回值。第二種發(fā)生錯(cuò)誤的情況下, 返回 false ,緊接著是一條錯(cuò)誤信息。 coroutine 中切換出去,可以調(diào)用 。當(dāng) coroutine 切出,與之配合的 就立即返回,甚至在 yield 發(fā)生在內(nèi)層的函數(shù)調(diào)用中也可以(就是說(shuō),這不限于發(fā)生在主函數(shù)中,也可以是主函數(shù)直接或間接調(diào)用的某個(gè)函數(shù)里)。在 yield 的情況下, 也是返回 true,緊跟著那些被傳入 的參數(shù)。等到下次你在繼續(xù)同樣的 coroutine ,將從調(diào)用 yield 的斷點(diǎn)處運(yùn)行下去。斷點(diǎn)處 yield 的返回值將是 傳入的參數(shù)。 類似 , 這個(gè)函數(shù)也將創(chuàng)建一個(gè) coroutine ,但是它并不返回 coroutine 本身,而是返回一個(gè)函數(shù)取而代之。一旦你調(diào)用這個(gè)返回函數(shù),就會(huì)切入 coroutine 運(yùn)行。所有傳入這個(gè)函數(shù)的參數(shù)等同于傳入 的參數(shù)。 會(huì)返回所有應(yīng)該由除第一個(gè)(錯(cuò)誤代碼的那個(gè)布爾量)之外的由 返回的值。和 不同, 不捕獲任何錯(cuò)誤;所有的錯(cuò)誤都應(yīng)該由調(diào)用者自己傳遞。 看下面這段代碼展示的一個(gè)例子: function foo (a) print(foo, a) return (2*a) end co = (function (a,b) print(cobody, a, b) local r = foo(a+1) print(cobody, r) local r, s = (a+b, ab) print(cobody, r, s) return b, end end) print(main, (co, 1, 10)) print(main, (co, r)) print(main, (co, x, y)) print(main, (co, x, y))當(dāng)你運(yùn)行它,將得到如下輸出結(jié)果: cobody 1 10 foo 2 main true 4 cobody r main true 11 9 cobody x y main true 10 end main false cannot resume dead coroutine3 程序接口(API)這個(gè)部分描述了 Lua 的 C API ,也就是宿主程序跟 Lua 通訊用的一組 C 函數(shù)。所有的 API 函數(shù)按相關(guān)的類型以及常量都聲明在頭文件 中。 雖然我們說(shuō)的是“函數(shù)”,但一部分簡(jiǎn)單的 API 是以宏的形式提供的。所有的這些宏都只使用它們的參數(shù)一次(除了第一個(gè)參數(shù),也就是 lua 狀態(tài)機(jī)),因此你不需擔(dān)心這些宏的展開(kāi)會(huì)引起一些副作用。 在所有的 C 庫(kù)中,Lua API 函數(shù)都不去檢查參數(shù)的有效性和堅(jiān)固性。然而,你可以在編譯 Lua 時(shí)加上打開(kāi)一個(gè)宏開(kāi)關(guān)來(lái)開(kāi)啟 文件中的宏 luai_apicheck 以改變這個(gè)行為。 堆棧Lua 使用一個(gè)虛擬棧來(lái)和 C 傳遞值。棧上的的每個(gè)元素都是一個(gè) Lua 值(nil,數(shù)字,字符串,等等)。 無(wú)論何時(shí) Lua 調(diào)用 C,被調(diào)用的函數(shù)都得到一個(gè)新的棧,這個(gè)棧獨(dú)立于 C 函數(shù)本身的堆棧,也獨(dú)立于以前的棧。(譯注:在 C 函數(shù)里,用 Lua API 不能訪問(wèn)到 Lua 狀態(tài)機(jī)中本次調(diào)用之外的堆棧中的數(shù)據(jù))它里面包含了 Lua 傳遞給 C 函數(shù)的所有參數(shù),而 C 函數(shù)則把要返回的結(jié)果也放入堆棧以返回給調(diào)用者(參見(jiàn) lua_CFunction
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1