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

正文內(nèi)容

lua51參考手冊-資料下載頁

2025-06-05 19:10本頁面
  

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