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

正文內(nèi)容

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

2025-07-04 07:36 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 返回第二個(gè)參數(shù)?;虿僮鞣?or 在第一個(gè)參數(shù)不為 nil 也不為 false 時(shí),返回這第一個(gè)參數(shù),否則返回第二個(gè)參數(shù)。 and 和 or 都遵循短路規(guī)則;也就是說,第二個(gè)操作數(shù)只在需要的時(shí)候去求值。這里有一些例子: 10 or 20 10 10 or error() 10 nil or a a nil and 10 nil false and error() false false and nil false false or nil nil 10 and 20 20(在這本手冊(cè)中, 指前面表達(dá)式的結(jié)果。) 連接符Lua 中字符串的連接操作符寫作兩個(gè)點(diǎn) (39。..39。)。如果兩個(gè)操作數(shù)都是字符串或都是數(shù)字,連接操作將以 167。 中提到的規(guī)則把其轉(zhuǎn)換為字符串。否則,會(huì)取調(diào)用元方法 concat (參見 167。)。 取長度操作符取長度操作符寫作一元操作 。字符串的長度是它的字節(jié)數(shù)(就是以一個(gè)字符一個(gè)字節(jié)計(jì)算的字符串長度)。 table t 的長度被定義成一個(gè)整數(shù)下標(biāo) n 。它滿足 t[n] 不是 nil 而 t[n+1] 為 nil;此外,如果 t[1] 為 nil ,n 就可能是零。對(duì)于常規(guī)的數(shù)組,里面從 1 到 n 放著一些非空的值的時(shí)候,它的長度就精確的為 n,即最后一個(gè)值的下標(biāo)。如果數(shù)組有一個(gè)“空洞” (就是說,nil 值被夾在非空值之間),那么 t 可能是指向任何一個(gè)是 nil 值的前一個(gè)位置的下標(biāo)(就是說,任何一個(gè) nil 值都有可能被當(dāng)成數(shù)組的結(jié)束)。 優(yōu)先級(jí)Lua 中操作符的優(yōu)先級(jí)寫在下表中,從低到高優(yōu)先級(jí)排序: or and = = ~= == .. + * / % not (unary) ^通常,你可以用括號(hào)來改變運(yùn)算次序。連接操作符 (39。..39。) 和冪操作 (39。^39。) 是從右至左的。其它所有的操作都是從左至右。 Table 構(gòu)造table 構(gòu)造子是一個(gè)構(gòu)造 table 的表達(dá)式。每次構(gòu)造子被執(zhí)行,都會(huì)構(gòu)造出一個(gè)新的 table 。構(gòu)造子可以被用來構(gòu)造一個(gè)空的 table,也可以用來構(gòu)造一個(gè) table 并初始化其中的一些域。一般的構(gòu)造子的語法如下 tableconstructor ::= `{180。 [fieldlist] `}180。 fieldlist ::= field {fieldsep field} [fieldsep] field ::= `[180。 exp `]180。 `=180。 exp | Name `=180。 exp | exp fieldsep ::= `,180。 | `。180。每個(gè)形如 [exp1] = exp2 的域向 table 中增加新的一項(xiàng),其鍵值為 exp1 而值為 exp2。形如 name = exp 的域等價(jià)于 [name] = exp。最后,形如 exp 的域等價(jià)于 [i] = exp , 這里的 i 是一個(gè)從 1 開始不斷增長的數(shù)字。這這個(gè)格式中的其它域不會(huì)破壞其記數(shù)。舉個(gè)例子: a = { [f(1)] = g。 x, y。 x = 1, f(x), [30] = 23。 45 }等價(jià)于 do local t = {} t[f(1)] = g t[1] = x 1st exp t[2] = y 2nd exp = 1 t[x] = 1 t[3] = f(x) 3rd exp t[30] = 23 t[4] = 45 4th exp a = t end如果表單中最后一個(gè)域的形式是 exp ,而且其表達(dá)式是一個(gè)函數(shù)調(diào)用或者是一個(gè)可變參數(shù),那么這個(gè)表達(dá)式所有的返回值將連續(xù)的進(jìn)入列表(參見 167。)。為了避免這一點(diǎn),你可以用括號(hào)把函數(shù)調(diào)用(或是可變參數(shù))括起來(參見 167。)。 初始化域表可以在最后多一個(gè)分割符,這樣設(shè)計(jì)可以方便由機(jī)器生成代碼。 函數(shù)調(diào)用Lua 中的函數(shù)調(diào)用的語法如下: functioncall ::= prefixexp args函數(shù)調(diào)用時(shí),第一步,prefixexp 和 args 先被求值。如果 prefixexp 的值的類型是 function,那么這個(gè)函數(shù)就被用給出的參數(shù)調(diào)用。否則 prefixexp 的元方法 call 就被調(diào)用,第一個(gè)參數(shù)就是 prefixexp 的值,跟下來的是原來的調(diào)用參數(shù)(參見 167。)。 這樣的形式 functioncall ::= prefixexp `:180。 Name args可以用來調(diào)用 方法。這是 Lua 支持的一種語法糖。像 v:name(args) 這個(gè)樣子,被解釋成 (v,args),這里 v 只會(huì)被求值一次。 參數(shù)的語法如下: args ::= `(180。 [explist1] `)180。 args ::= tableconstructor args ::= String所有參數(shù)的表達(dá)式求值都在函數(shù)調(diào)用之前。這樣的調(diào)用形式 f{fields} 是一種語法糖用于表示 f({fields});這里指參數(shù)列表是一個(gè)單一的新創(chuàng)建出來的列表。而這樣的形式 f39。string39。 (或是 fstring 亦或是 f[[string]])也是一種語法糖,用于表示 f(39。string39。);這里指參數(shù)列表是一個(gè)單獨(dú)的字符串。 因?yàn)楸磉_(dá)式語法在 Lua 中比較自由,所以你不能在函數(shù)調(diào)用的 39。(39。 前換行。這個(gè)限制可以避免語言中的一些歧義。比如你這樣寫 a = f (g).x(a)Lua 將把它當(dāng)作一個(gè)單一語句段, a = f(g).x(a) 。因此,如果你真的想作為成兩個(gè)語句段,你必須在它們之間寫上一個(gè)分號(hào)。如果你真的想調(diào)用 f,你必須從 (g) 前移去換行。 這樣一種調(diào)用形式:return functioncall 將觸發(fā)一個(gè)尾調(diào)用。 Lua 實(shí)現(xiàn)了適當(dāng)?shù)奈膊空{(diào)用(或是適當(dāng)?shù)奈策f歸):在尾調(diào)用中,被調(diào)用的函數(shù)重用調(diào)用它的函數(shù)的堆棧項(xiàng)。因此,對(duì)于程序執(zhí)行的嵌套尾調(diào)用的層數(shù)是沒有限制的。然而,尾調(diào)用將刪除調(diào)用它的函數(shù)的任何調(diào)試信息。注意,尾調(diào)用只發(fā)生在特定的語法下,這時(shí), return 只有單一函數(shù)調(diào)用作為參數(shù);這種語法使得調(diào)用函數(shù)的結(jié)果可以精確返回。因此,下面這些例子都不是尾調(diào)用: return (f(x)) 返回值被調(diào)整為一個(gè) return 2 * f(x) return x, f(x) 最加若干返回值 f(x)。 return 無返回值 return x or f(x) 返回值被調(diào)整為一個(gè) 函數(shù)定義函數(shù)定義的語法如下: function ::= function funcbody funcbody ::= `(180。 [parlist1] `)180。 block end另外定義了一些語法糖簡(jiǎn)化函數(shù)定義的寫法: stat ::= function funame funcbody stat ::= local function Name funcbody funame ::= Name {`.180。 Name} [`:180。 Name]這樣的寫法: function f () body end被轉(zhuǎn)換成 f = function () body end這樣的寫法: function () body end被轉(zhuǎn)換成 = function () body end這樣的寫法: local function f () body end被轉(zhuǎn)換成 local f。 f = function () body end注意,并不是轉(zhuǎn)換成 local f = function () body end(這個(gè)差別只在函數(shù)體內(nèi)需要引用 f 時(shí)才有。) 一個(gè)函數(shù)定義是一個(gè)可執(zhí)行的表達(dá)式,執(zhí)行結(jié)果是一個(gè)類型為 function 的值。當(dāng) Lua 預(yù)編譯一個(gè) chunk 的時(shí)候, chunk 作為一個(gè)函數(shù),整個(gè)函數(shù)體也就被預(yù)編譯了。那么,無論何時(shí) Lua 執(zhí)行了函數(shù)定義,這個(gè)函數(shù)本身就被實(shí)例化了(或者說是關(guān)閉了)。這個(gè)函數(shù)的實(shí)例(或者說是 closure(閉包))是表達(dá)式的最終值。相同函數(shù)的不同實(shí)例有可能引用不同的外部局部變量,也可能擁有不同的環(huán)境表。 形參(函數(shù)定義需要的參數(shù))是一些由實(shí)參(實(shí)際傳入?yún)?shù))的值初始化的局部變量: parlist1 ::= namelist [`,180。 `...180。] | `...180。當(dāng)一個(gè)函數(shù)被調(diào)用,如果函數(shù)沒有被定義為接收不定長參數(shù),即在形參列表的末尾注明三個(gè)點(diǎn) (39。...39。),那么實(shí)參列表就會(huì)被調(diào)整到形參列表的長度,變長參數(shù)函數(shù)不會(huì)調(diào)整實(shí)參列表;取而代之的是,它將把所有額外的參數(shù)放在一起通過變長參數(shù)表達(dá)式傳遞給函數(shù),其寫法依舊是三個(gè)點(diǎn)。這個(gè)表達(dá)式的值是一串實(shí)參值的列表,看起來就跟一個(gè)可以返回多個(gè)結(jié)果的函數(shù)一樣。如果一個(gè)變長參數(shù)表達(dá)式放在另一個(gè)表達(dá)式中使用,或是放在另一串表達(dá)式的中間,那么它的返回值就會(huì)被調(diào)整為單個(gè)值。若這個(gè)表達(dá)式放在了一系列表達(dá)式的最后一個(gè),就不會(huì)做調(diào)整了(除非用括號(hào)給括了起來)。 我們先做如下定義,然后再來看一個(gè)例子: function f(a, b) end function g(a, b, ...) end function r() return 1,2,3 end下面看看實(shí)參到形參數(shù)以及可變長參數(shù)的映射關(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, ... (nothing) g(3, 4) a=3, b=4, ... (nothing) g(3, 4, 5, 8) a=3, b=4, ... 5 8 g(5, r()) a=5, b=1, ... 2 3結(jié)果由 return 來返回(參見 167。)。如果執(zhí)行到函數(shù)末尾依舊沒有遇到任何 return 語句,函數(shù)就不會(huì)返回任何結(jié)果。 冒號(hào)語法可以用來定義方法,就是說,函數(shù)可以有一個(gè)隱式的形參 self。因此,如下寫法: function :f (params) body end是這樣一種寫法的語法糖: = function (self, params) body end 可視規(guī)則Lua 是一個(gè)有詞法作用范圍的語言。變量的作用范圍開始于聲明它們之后的第一個(gè)語句段,結(jié)束于包含這個(gè)聲明的最內(nèi)層語句塊的結(jié)束點(diǎn)??聪旅孢@些例子: x = 10 全局變量 do 新的語句塊 local x = x 新的一個(gè) 39。x39。, 它的值現(xiàn)在是 10 print(x) 10 x = x+1 do 另一個(gè)語句塊 local x = x+1 又一個(gè) 39。x39。 print(x) 12 end print(x) 11 end print(x) 10 (取到的是全局的那一個(gè))注意這里,類似 local x = x 這樣的聲明,新的 x 正在被聲明,但是還沒有進(jìn)入它的作用范圍,所以第二個(gè) x 指向的是外面一層的變量。 因?yàn)橛羞@樣一個(gè)詞法作用范圍的規(guī)則,所以可以在函數(shù)內(nèi)部自由的定義局部變量并使用它們。當(dāng)一個(gè)局部變量被更內(nèi)層的函數(shù)中使用的時(shí)候,它被內(nèi)層函數(shù)稱作 upvalue(上值),或是 外部局部變量。 注意,每次執(zhí)行到一個(gè) local 語句都會(huì)定義出一個(gè)新的局部變量。看看這樣一個(gè)例子: a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1。 return x+y end end這個(gè)循環(huán)創(chuàng)建了十個(gè) closure(這指十個(gè)匿名函數(shù)的實(shí)例)。這些 closure 中的每一個(gè)都使用了不同的 y 變量,而它們又共享了同一份 x。 錯(cuò)誤處理因?yàn)?Lua 是一個(gè)嵌入式的擴(kuò)展語言,所有的 Lua 動(dòng)作都是從宿主程序的 C 代碼調(diào)用 Lua 庫(參見 lua_pcall)中的一個(gè)函數(shù)開始的。在 Lua 編譯或運(yùn)行的任何時(shí)候發(fā)生了錯(cuò)誤,控制權(quán)都會(huì)交還給 C ,而
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1