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

正文內(nèi)容

lua51參考手冊(參考版)

2025-06-08 19:10本頁面
  

【正文】 更詳細(xì)的說明一下,如果堆棧有 n 個元素,那么索引 1 表示第一個元素(也就是最先被壓入堆棧的元素。 方便起見,所有針對棧的 API 查詢操作都不嚴(yán)格遵循棧的操作規(guī)則。 無論何時 Lua 調(diào)用 C,被調(diào)用的函數(shù)都得到一個新的棧,這個棧獨立于 C 函數(shù)本身的堆棧,也獨立于以前的棧。 堆棧Lua 使用一個虛擬棧來和 C 傳遞值。 在所有的 C 庫中,Lua API 函數(shù)都不去檢查參數(shù)的有效性和堅固性。 雖然我們說的是“函數(shù)”,但一部分簡單的 API 是以宏的形式提供的。 看下面這段代碼展示的一個例子: 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ù)。 會返回所有應(yīng)該由除第一個(錯誤代碼的那個布爾量)之外的由 返回的值。一旦你調(diào)用這個返回函數(shù),就會切入 coroutine 運行。斷點處 yield 的返回值將是 傳入的參數(shù)。在 yield 的情況下, 也是返回 true,緊跟著那些被傳入 的參數(shù)。 coroutine 中切換出去,可以調(diào)用 。第一種情況中, 返回 true ,接下來會跟著 coroutine 主函數(shù)的一系列返回值。 coroutine 可以通過兩種方式來終止運行:一種是正常退出,指它的主函數(shù)返回(最后一條指令被運行后,無論有沒有顯式的返回指令)。接下來傳入 的參數(shù)將被傳進(jìn) coroutine 的主函數(shù)。 當(dāng)你第一次調(diào)用 時,所需傳入的第一個參數(shù)就是 的返回值。它只接收單個參數(shù),這個參數(shù)是 coroutine 的主函數(shù)。然而和多線程系統(tǒng)中的線程不同,coroutine 只在顯式的調(diào)用了 yield 函數(shù)時才會掛起。 Coroutine (協(xié)同例程)Lua 支持 coroutine ,這個東西也被稱為協(xié)同式多線程 (collaborative multithreading) 。 在你把一個 table 當(dāng)作一個 metatable 使用之后,就不能再修改 __mode 域的值。v39。 的字符串時, table 的鍵就是 weak 的。如果 __mode 域中是一個包含有字符 39。任何情況下,如果鍵和值中任一個被回收了,整個鍵值對就會從 table 中拿掉。如果一個 table 只有鍵是 weak 的,那么將運行收集器回收它們的鍵,但是會阻止回收器回收對應(yīng)的值。弱引用將被垃圾收集器忽略掉,換句話說,如果對一個對象的引用只有弱引用,垃圾收集器將回收這個對象。也就是說,收集列表中,最后一個在程序中被創(chuàng)建的 userdata 的結(jié)束子會被第一個調(diào)用。取而代之的是,Lua 把它們放到一個列表中。結(jié)束子允許你用額外的資源管理器和 Lua 的內(nèi)存管理器協(xié)同工作(比如關(guān)閉文件、網(wǎng)絡(luò)連接、或是數(shù)據(jù)庫連接,也可以說釋放你自己的內(nèi)存)。)設(shè)置一個垃圾收集的元方法。通過這些函數(shù),你也可以直接控制收集器(例如,停止或是重啟)。 你可以通過在 C 中調(diào)用 lua_gc 或是在 Lua 中調(diào)用 collectgarbage 來改變這些數(shù)字。小于 1 的值會使收集器工作的非常慢,可能導(dǎo)致收集器永遠(yuǎn)都結(jié)束不了當(dāng)前周期。 step multiplier 控制了收集器相對內(nèi)存分配的速度。小于 1 的值意味著收集器在新的周期開始時不再等待。 garbagecollector pause 控制了收集器在開始一個新的收集周期之前要等待多久。 Lua 實現(xiàn)了一個增量標(biāo)記清除的收集器。 Lua 通過運行一個垃圾收集器來自動管理內(nèi)存,以此一遍又一遍的回收死掉的對象(這是指 Lua 中不再訪問的到的對象)占用的內(nèi)存。 垃圾收集Lua 提供了一個自動的內(nèi)存管理。 你可以通過調(diào)用 setfenv 來改變一個 Lua 函數(shù)或是正在運行中的線程的環(huán)境。)的所有訪問。它們會作為這個 C 函數(shù)中創(chuàng)建的其它函數(shù)的缺省環(huán)境。 關(guān)聯(lián)在 C 函數(shù)上的環(huán)境可以直接被 C 代碼訪問(參見 167。而且它可以被 C 代碼直接訪問(參見 167。 關(guān)聯(lián)在線程上的環(huán)境被稱作全局環(huán)境。 userdata 的環(huán)境在 Lua 中沒有意義。? 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)用。 return end? h = metatable(table).__newindex? if h == nil then rawset(table, key, value)。? 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 。 ? index: 取下標(biāo)操作用于訪問 table[key] 。? end? end? end? enda = b 等價于 b = a 。? end? end? enda b 等價于 b a. ? le: = 操作。 ? lt: 操作。元方法僅僅在參于比較的兩個對象類型相同且有對應(yīng)操作相同的元方法時才起效。 ? eq: == 操作。 ? function len_event (op)? if type(op) == string then? return strlen(op) 原生的取字符串長度? elseif type(op) == table then? return op 原生的取 table 長度? else? local h = metatable(op).__len? if h then? 調(diào)用操作數(shù)的處理器? return h(op)? else 沒有處理器:缺省行為? error(???)? end? end? end關(guān)于 table 的長度參見 167。? else 操作數(shù)不是數(shù)字。 是一個原生的 39。 ? function unm_event (op)? local o = tonumber(op)? if o then 操作數(shù)是數(shù)字?? return o 這里的 39。 其行為類似于 add 操作,它的原生操作是調(diào)用 pow 函數(shù)(通過 C math 庫)。 ? mod: % 操作。 ? div: / 操作。 ? mul: * 操作。 else 至少一個操作數(shù)不是數(shù)字時 local h = getbinhandler(op1, op2, __add) if h then 以兩個操作數(shù)來調(diào)用處理器 return h(op1, op2) else 沒有處理器:缺省行為 error(???) end end end? sub: 操作。 是原生的 39。 function getbinhandler (op1, op2, event) return metatable(op1)[event] or metatable(op2)[event] end通過這個函數(shù), op1 + op2 的行為就是 function add_event (op1, op2) local o1, o2 = tonumber(op1), tonumber(op2) if o1 and o2 then 兩個操作數(shù)都是數(shù)字? return o1 + o2 這里的 39。首先,Lua 嘗試第一個操作數(shù)。 ? add: + 操作。 中找到。這些用于描述的的代碼中用到的函數(shù)( rawget , tonumber ,等等。這些操作的語義用一個 Lua 函數(shù)來描述解釋器如何執(zhí)行更為恰當(dāng)。__39。每個操作都用相應(yīng)的名字區(qū)分。如果有的話,鍵名對應(yīng)的值(元方法)將控制 Lua 怎樣做這個操作。對于這些操作,Lua 都將其關(guān)聯(lián)上一個被稱作事件的指定健。因此,所有的數(shù)字一起只有一個 metatable ,所有的字符串也是,等等。你不能從 Lua 中改變其它任何類型的值的 metatable (使用 debug 庫例外);要這樣做的話必須使用 C API 。 你可以通過 getmetatable 函數(shù)來查詢到任何一個值的 metatable。 我們叫 metatable 中的鍵名為 事件 (event) ,把其中的值叫作 元方法 (metamethod)。舉例來說,當(dāng)一個非數(shù)字的值作加法操作的時候, Lua 會檢查它的 metatable 中 __add 域中的是否有一個函數(shù)。這個 metatable 就是一個原始的 Lua table ,它用來定義原始值在特定操作下的行為。如果你需要在 Lua 中捕獲發(fā)生的錯誤,你可以使用 pcall 函數(shù)。在 Lua 編譯或運行的任何時候發(fā)生了錯誤,控制權(quán)都會交還給 C ,而 C 可以來做一些恰當(dāng)?shù)拇胧ū热绱蛴〕鲆粭l錯誤信息)。這些 closure 中的每一個都使用了不同的 y 變量,而它們又共享了同一份 x??纯催@樣一個例子: a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1。當(dāng)一個局部變量被更內(nèi)層的函數(shù)中使用的時候,它被內(nèi)層函數(shù)稱作 upvalue(上值),或是 外部局部變量。 print(x) 12 end print(x) 11 end print(x) 10 (取到的是全局的那一個)注意這里,類似 local x = x 這樣的聲明,新的 x 正在被聲明,但是還沒有進(jìn)入它的作用范圍,所以第二個 x 指向的是外面一層的變量。, 它的值現(xiàn)在是 10 print(x) 10 x = x+1 do 另一個語句塊 local x = x+1 又一個 39??聪旅孢@些例子: x = 10 全局變量 do 新的語句塊 local x = x 新的一個 39。因此,如下寫法: function :f (params) body end是這樣一種寫法的語法糖: = function (self, params) body end 可視規(guī)則Lua 是一個有詞法作用范圍的語言。如果執(zhí)行到函數(shù)末尾依舊沒有遇到任何 return 語句
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1