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

正文內(nèi)容

lua50參考手冊(cè)(編輯修改稿)

2025-07-02 19:11 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 temp[x] = 1 temp[3] = f(x) 3rd exp temp[30] = 23 temp[4] = 45 4th exp a = temp end如果列表中最后一個(gè)字段的形式是 exp 同時(shí)表達(dá)式又是一個(gè)函數(shù)調(diào)用,那么調(diào)用返回的所有值會(huì)依次進(jìn)入列表(見(jiàn) )。如果要避免這種情況,在函數(shù)調(diào)用兩邊加上括號(hào)(見(jiàn) )。 字段列表可以有一個(gè)結(jié)尾的分隔符,這個(gè)對(duì)由機(jī)器生成的列表十分方便。 函數(shù)調(diào)用Lua中的一個(gè)函數(shù)調(diào)用有如下語(yǔ)法: functioncall ::= prefixexp args在函數(shù)調(diào)用中,首先會(huì)計(jì)算 prefixexp 和 args 。如果 prefixexp 的值是 function 類型,那么那個(gè)函數(shù)就會(huì)被調(diào)用,同時(shí)使用給出的參數(shù)。否則,他的 call 元方法就會(huì)被調(diào)用,第一個(gè)參數(shù)是 prefixexp 的值,接下來(lái)是原來(lái)的調(diào)用參數(shù)(見(jiàn) )。 形式 functioncall ::= prefixexp `:180。 Name args可以用來(lái)調(diào)用“方法”(methods)。調(diào)用 v:name(...) 語(yǔ)法上比 (v,...),要好一些,除非表達(dá)式 v 只計(jì)算一次。 參數(shù)可以有以下幾種語(yǔ)法: args ::= `(180。 [explist1] `)180。 args ::= tableconstructor args ::= Literal所有的參數(shù)表達(dá)式都會(huì)在實(shí)際調(diào)用之前進(jìn)行計(jì)算。f{...} 的調(diào)用形式在語(yǔ)法上較 f({...}) 要好,是因?yàn)?,參?shù)列表示一個(gè)單獨(dú)的新表。 f39。...39。 (或者 f... 或者 f[[...]]) 較 f(39。...39。) 要好,是因?yàn)閰?shù)列表是一個(gè)單獨(dú)的字符串。 因?yàn)楹瘮?shù)可以返回任意個(gè)結(jié)果(見(jiàn) ),結(jié)果的數(shù)量必須在使用它們前進(jìn)行調(diào)整。如果函數(shù)按照語(yǔ)句進(jìn)行調(diào)用(見(jiàn) ),那么它的返回列表就會(huì)被調(diào)整為零個(gè)元素,這樣就舍棄了所有的返回值。如果調(diào)用函數(shù)時(shí),他是一個(gè)表達(dá)式列表的最后一個(gè)元素,那么不會(huì)做調(diào)整(除非調(diào)用時(shí)加了括號(hào))。 以下是一些例子: f() 調(diào)整為0個(gè)結(jié)果 g(f(), x) f() 被調(diào)整成1個(gè)結(jié)果 g(x, f()) g 獲得 x 加上f()返回的所有值 a,b,c = f(), x f() 被調(diào)整成1個(gè)結(jié)果(此時(shí)c獲得nil值) a,b,c = x, f() f() 被調(diào)整為兩個(gè)結(jié)果 a,b,c = f() f() 被調(diào)整為3個(gè)結(jié)果 return f() 返回所有 f() 返回的值 return x,y,f() 建立一個(gè)表包含所有 f() 返回的值 {f()} creates a list with all values returned by f() {f(), nil} f() 被調(diào)整為一個(gè)結(jié)果如果你用括號(hào)括起調(diào)用的函數(shù),那么它就會(huì)被調(diào)整為返回一個(gè)值。 return x,y,(f()) returns x, y, and the first value from f() {(f())} creates a table with exactly one element作為L(zhǎng)ua語(yǔ)法自由格式的一個(gè)例外,你不能在函數(shù)調(diào)用的 `(180。 前面加入一個(gè)換行。這個(gè)限制可以避免語(yǔ)言中的一些二義性。如果你寫(xiě): a = f (g).x(a)Lua會(huì)讀作 a = f(g).x(a)。這樣,如果你想執(zhí)行為兩條語(yǔ)句,你必須在中間加分號(hào)。如果你實(shí)際上想調(diào)用 f,你就必須刪除 (g) 前面的換行。 return functioncall 的調(diào)用格式稱之為 尾部調(diào)用(tail call)。Lua實(shí)現(xiàn)了proper tail calls;在一個(gè)尾部調(diào)用中,被調(diào)用的函數(shù)將會(huì)重新使用調(diào)用程序的棧。因此,程序執(zhí)行對(duì)嵌套尾部調(diào)用的次數(shù)沒(méi)有任何限制。然而,尾部調(diào)用會(huì)清楚調(diào)用函數(shù)的調(diào)試信息。注意尾部調(diào)用只有在特殊的語(yǔ)法中才能出現(xiàn),也就是 return 只有一個(gè)函數(shù)調(diào)用作為參數(shù),這種語(yǔ)法保證了調(diào)用函數(shù)確切返回被調(diào)用函數(shù)的返回值。所以,下面的例子都不是尾部調(diào)用: return (f(x)) results adjusted to 1 return 2 * f(x) return x, f(x) additional results f(x)。 return results discarded return x or f(x) results adjusted to 1 函數(shù)定義函數(shù)定義的語(yǔ)法是: function ::= function funcbody funcbody ::= `(180。 [parlist1] `)180。 block end下面較好的語(yǔ)法簡(jiǎn)化了函數(shù)定義: stat ::= function funame funcbody stat ::= local function Name funcbody funame ::= Name {`.180。 Name} [`:180。 Name]語(yǔ)句 function f () ... end會(huì)被翻譯為 f = function () ... end語(yǔ)句 function () ... end會(huì)被翻譯為 = function () ... end語(yǔ)句 local function f () ... end會(huì)被翻譯為 local f。 f = function () ... end一個(gè)函數(shù)定義是一個(gè)可執(zhí)行的表達(dá)式,他的類型為 函數(shù)(function) 。當(dāng)Lua預(yù)編譯語(yǔ)句段的時(shí)候,他的函數(shù)體也會(huì)被預(yù)編譯。這樣,當(dāng)Lua執(zhí)行函數(shù)定義的時(shí)候,函數(shù)被 實(shí)例化 (封裝 closed)。這個(gè)函數(shù)實(shí)例(或閉包 closure)是表達(dá)式的最終結(jié)果。同一個(gè)函數(shù)的不同的實(shí)例可以引用不同的外部局部變量也可以有不同的環(huán)境表。 形式參數(shù)(代表參數(shù)的變量,簡(jiǎn)稱形參)就像用實(shí)際參數(shù)值(簡(jiǎn)稱實(shí)參)初始化的局部變量一樣。 parlist1 ::= namelist [`,180。 `...180。] parlist1 ::= `...180。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),實(shí)參表會(huì)調(diào)整為和形參一樣的長(zhǎng)度,除非函數(shù)是 variadic 或者 變長(zhǎng)參數(shù)函數(shù)(vararg function)。變長(zhǎng)參數(shù)函數(shù)在其參數(shù)列表最后有三個(gè)點(diǎn) (`...180。)。 變長(zhǎng)參數(shù)函數(shù)不會(huì)對(duì)參數(shù)列表進(jìn)行調(diào)整;而是,它把所有的額外實(shí)參放到一個(gè)隱含的形參 arg中。 arg 的值是一個(gè)表,包含一個(gè)字段`n180。 表示額外參數(shù)的個(gè)數(shù),位置 1,2,...,n是額外的參數(shù)。 請(qǐng)思考以下函數(shù)定義的例子: function f(a, b) end function g(a, b, ...) end function r() return 1,2,3 end然后,我們有以下實(shí)參到形參的對(duì)應(yīng)關(guān)系: CALL PARAMETERS f(3) a=3, b=nil f(3, 4) a=3, b=4 f(3, 4, 5) a=3, b=4 f(r(), 10) a=1, b=10 f(r()) a=1, b=2 g(3) a=3, b=nil, arg={n=0} g(3, 4) a=3, b=4, arg={n=0} g(3, 4, 5, 8) a=3, b=4, arg={5, 8。 n=2} g(5, r()) a=5, b=1, arg={2, 3。 n=2}結(jié)果使用 return 語(yǔ)句返回(見(jiàn) )。如果控制到達(dá)了函數(shù)尾部而沒(méi)有遇到 return 語(yǔ)句,那么函數(shù)沒(méi)有返回值。 冒號(hào)(:) 語(yǔ)法是用來(lái)定義 methods 的,也就是,函數(shù)有一個(gè)隱含的額外參數(shù) self. 。這樣,語(yǔ)句: function :f (...) ... end相對(duì)以下是較好的形式: = function (self, ...) ... end 可見(jiàn)性規(guī)則Lua是一個(gè)有詞法范圍的語(yǔ)言。變量的范圍從聲明語(yǔ)句后的第一個(gè)語(yǔ)句開(kāi)始到包含聲明的最內(nèi)部的語(yǔ)句塊為止。例如: x = 10 global variable do new block local x = x new `x39。, with value 10 print(x) 10 x = x+1 do another block local x = x+1 another `x39。 print(x) 12 end print(x) 11 end print(x) 10 (the global one)注意:在類似 local x = x,正在聲明的新的 x 尚未進(jìn)入范圍,所以第二個(gè) x 指代的是外面的變量。 由于詞法范圍的規(guī)則,在局部變量的范圍內(nèi)定義的函數(shù)可以任意訪問(wèn)這些變量。例如: local counter = 0 function inc (x) counter = counter + x return counter end內(nèi)部函數(shù)使?玫木植勘淞吭諍誆砍浦? 上值(upvalue),或者 外局部變量(external local variable)。 注意每個(gè) local 語(yǔ)句執(zhí)行時(shí)會(huì)定義一個(gè)新的局部變量??匆韵吕樱? a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1。 return x+y end end循環(huán)產(chǎn)生了十個(gè)閉包(也就是,十個(gè)匿名函數(shù)的實(shí)例)。每個(gè)閉包使用不同的 y 變量,但他們共享同一個(gè) x 變量。 錯(cuò)誤處理因?yàn)長(zhǎng)ua是一個(gè)擴(kuò)展語(yǔ)言,所有的Lua動(dòng)作都是從宿主程序中調(diào)用Lua庫(kù)中函數(shù)的C代碼開(kāi)始的(見(jiàn) )。無(wú)論錯(cuò)誤發(fā)生在Lua編譯過(guò)程時(shí)或執(zhí)行時(shí),控制返回C,然后可以做相應(yīng)的處理(比如打印一個(gè)錯(cuò)誤)。 Lua代碼可以通過(guò)調(diào)用error函數(shù)來(lái)產(chǎn)生一個(gè)錯(cuò)誤(見(jiàn) )。如果你要在Lua中捕獲錯(cuò)誤,你可以使用 pcall 函數(shù)(見(jiàn) )。 元表 (Metatables)Lua中的每一個(gè)表和用戶數(shù)據(jù)都可以擁有一個(gè) 元表(metatable)。這個(gè) 元表 是一個(gè)普通的Lua表,定義了在特定操作下原始表和用戶數(shù)據(jù)的行為。你可以通過(guò)設(shè)置一個(gè)對(duì)象的元表中的特定字段來(lái)更改它某些方面的行為。例如,當(dāng)一個(gè)對(duì)象是一個(gè)加法的操作數(shù)時(shí),Lua檢查它的元表中的 __add 字段是不是一個(gè)函數(shù)。如果是,Lua調(diào)用它來(lái)執(zhí)行加法。 我們稱元表中的鍵(字段名,key)為 事件(events) ,值為 元方法(metamethods)。在上一個(gè)例子中, add 是事件,執(zhí)行加法的函數(shù)是元方法。 你可以通過(guò) set/getmetatable 函數(shù)來(lái)查詢和更改一個(gè)對(duì)象的元表(見(jiàn) )。 元表可以控制對(duì)象在算術(shù)操作、比較、串連接、索引取值中如何運(yùn)行。元表也可以定義一個(gè)函數(shù)當(dāng)收集內(nèi)存垃圾時(shí)調(diào)用。每一個(gè)操作這里L(fēng)ua都用一個(gè)特定的鍵關(guān)聯(lián),稱之為事件。當(dāng)Lua對(duì)一個(gè)表或是一個(gè)用戶數(shù)據(jù)執(zhí)行上面中的一個(gè)操作時(shí),它先檢查元表控制的操作已經(jīng)羅列在下面。每個(gè)操作有一個(gè)相應(yīng)的名稱,代表了他的含義。他們?cè)谠碇械逆I是由名稱前加上兩條下劃線;如,操作 add 的鍵是 __add。這些操作的語(yǔ)義 這里給出的Lua代碼僅僅是說(shuō)明性的;真正的行為是硬編碼在解釋器中的,比下面的的模擬的效率要高很多。描述中用到的函數(shù) (rawget, tonumber, 等等) 在 中會(huì)對(duì)他們進(jìn)行描述。特別地,要獲得一個(gè)給定對(duì)象的元方法,我們使用這個(gè)表達(dá)式: metatable(obj)[event]這個(gè)要讀作: rawget(metatable(obj) or {}, event)也就是,訪問(wèn)元方法時(shí)不會(huì)調(diào)用其它元方法,同時(shí)調(diào)用沒(méi)有元表的對(duì)象不會(huì)出錯(cuò)(它返回一個(gè) nil值)。 add: + 加法操作。 下面的 getbinhandler 函數(shù)定義了Lua如何給一個(gè)二元操作選擇一個(gè)處理器。首先,Lua嘗試第一個(gè)操作數(shù)。如果它的類型沒(méi)有定義這個(gè)操作的處理器,那么然后Lua嘗試第二個(gè)操作數(shù)。 function getbinhandler (op1, op2, event) return metatable(op1)[event] or metatable(op2)[event] end利用該函數(shù),op1 + op2
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1