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

正文內(nèi)容

lua__參考手冊(cè)docx頁(yè)(編輯修改稿)

2024-12-11 08:16 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 創(chuàng)建一個(gè)列表 {f(), nil} f() 被調(diào)整為一個(gè)結(jié)果 被括號(hào)括起來(lái)的表達(dá)式永遠(yuǎn)被當(dāng)作一個(gè)值。所以, (f(x,y,z)) 即使 f 返回多個(gè)值,這個(gè)表達(dá)式永遠(yuǎn)是一個(gè)單一值。( (f(x,y,z)) 的值是 f 返回的第一個(gè)值。如果 f 不返回值的話,那么它的值就是 nil 。) 數(shù)學(xué)運(yùn)算操作符 Lua 支持常見(jiàn)的數(shù)學(xué)運(yùn)算操作符:二元操作 + ( 加法), (減法), * (乘法), / (除法), % (取模),以及 ^ (冪);和一元操作 (取負(fù))。如果對(duì)數(shù)字操作,或是可以轉(zhuǎn)換為數(shù)字的字符串(參見(jiàn) 167。 ),所有這些操作都依賴它通常的含義。冪操作可以對(duì)任何冪值都正常工作。比如, x^() 將計(jì)算出 x 平方根的倒數(shù)。取模操作被定義為 a % b == a (a/b)*b 這就是說(shuō),其結(jié)果是商相對(duì)負(fù)無(wú)窮圓整后的余數(shù)。(譯注:負(fù)數(shù)對(duì)正數(shù)取模的結(jié)果為正數(shù)) 比較操作符 Lua 中的比較操作符有 == ~= = = 這些操作的結(jié)果不是 false 就是 true。 等于操作 (==) 首先比較操作數(shù)的類型。如果類型不同,結(jié)果就是 false。否則,繼續(xù)比較值。數(shù)字和字符串都用常規(guī)的方式比較。對(duì)象 ( table , userdata ,thread ,以及 函數(shù))以引用的形式比較:兩個(gè)對(duì)象只有在它們指向同一個(gè)東西時(shí)才認(rèn)為相等。每次你創(chuàng)建一個(gè)新對(duì)象(一個(gè) table 或是 userdata , thread 函數(shù)),它們都各不相同,即不同于上次創(chuàng)建的東西。 你可以改變 Lua 比較 table 和 userdata 的方式,這需要使用 eq 這個(gè)原方法(參見(jiàn) 167。 )。 167。 中提及的轉(zhuǎn)換規(guī)則并不作用于比較操作。所以, 0==0 等于 false,而且 t[0] 和 t[0] 描述的是 table 中不同的域。 操作符 ~= 完全等價(jià)于 (==) 操作的反值。 大小比較操作以以下方式進(jìn)行。如果參數(shù)都是數(shù)字,那么就直接做數(shù)字比較。否則,如果參數(shù)都是字符串,就用字符串比較的方式進(jìn)行。再則, Lua 就試著 調(diào)用 lt 或是 le 元方法(參見(jiàn) 167。 )。 邏輯操作符 Lua 中的邏輯操作符有 and, or, 以及 not。和控制結(jié)構(gòu)(參見(jiàn) 167。2 .)一樣,所有的邏輯操作符把 false 和 nil 都作為假,而其它的一切都當(dāng)作真。 取反操作 not 總是返回 false 或 true 中的一個(gè)。與操作符 and 在第一個(gè)參數(shù)為 false 或 nil 時(shí)返回這第一個(gè)參數(shù);否則, and 返回第二個(gè)參數(shù)?;虿僮鞣? or 在第一個(gè)參數(shù)不為 nil 也不為 false 時(shí),返回這第一個(gè)參數(shù),否則返回第二個(gè)參數(shù)。 and 和 or 都遵循短路規(guī)則;也就是說(shuō),第二個(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 (參見(jiàn) 167。 )。 取長(zhǎng)度操作符 取長(zhǎng)度操作符寫作一元操作 。字符串的長(zhǎng)度是它的字節(jié)數(shù)(就是以一個(gè)字符一個(gè)字節(jié)計(jì)算的字符串長(zhǎng)度)。 table t 的長(zhǎng)度被定義成一個(gè)整數(shù)下標(biāo) n 。它滿足 t[n] 不是 nil 而 t[n+1] 為 nil;此外,如果 t[1] 為 nil , n 就可能是零。對(duì)于常規(guī)的數(shù)組,里面從 1 到 n 放著一些非空的值的時(shí)候,它的長(zhǎng)度就精確的為 n,即最后一個(gè)值的下標(biāo)。如果數(shù)組有一 個(gè) “ 空洞 ” (就是說(shuō), nil 值被夾在非空值之間),那么 t 可能是指向任何一個(gè)是 nil 值的前一個(gè)位置的下標(biāo)(就是說(shuō),任何一個(gè) nil 值都有可能被當(dāng)成數(shù)組的結(jié)束)。 優(yōu)先級(jí) Lua 中操作符的優(yōu)先級(jí)寫在下表中,從低到高優(yōu)先級(jí)排序: or and = = ~= == .. + * / % not (unary) ^ 通常,你可以用括號(hào)來(lái)改變運(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)造子可以被用來(lái)構(gòu)造一個(gè)空的 table,也可以用來(lái)構(gòu)造一個(gè) table 并初始化其中的一些域。一般的構(gòu)造子的語(yǔ)法如下 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 開(kāi)始不斷增長(zhǎng)的數(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)入列表(參見(jiàn) 167。 )。為了避免這一點(diǎn),你可以用括號(hào)把函數(shù)調(diào)用(或是可變參數(shù))括起來(lái)(參見(jiàn) 167。 )。 初始化域表可以在最后多一個(gè)分割符,這樣設(shè)計(jì)可以方便由機(jī)器生成代碼。 函數(shù)調(diào)用 Lua 中的函數(shù)調(diào)用的語(yǔ)法如下: functioncall ::= prefixexp args 函數(shù)調(diào)用時(shí),第一步, prefixexp 和 args 先被求值。如果 prefixexp 的值的類型是 function,那么這個(gè)函數(shù)就被用給出的參數(shù)調(diào)用。否則 prefixexp 的元方法 call 就被調(diào)用,第一個(gè)參數(shù)就是 prefixexp 的值,跟下來(lái)的是原來(lái)的調(diào)用參數(shù)(參見(jiàn) 167。 )。 這樣的形式 functioncall ::= prefixexp `:180。 Name args 可以用來(lái)調(diào)用 方法 。這是 Lua 支持的一種語(yǔ)法糖。像 v:name(args) 這個(gè)樣子,被解釋成 (v,args),這里 v 只會(huì)被求值一次。 參數(shù)的語(yǔ)法如下: args ::= `(180。 [explist1] `)180。 args ::= tableconstructor args ::= String 所有參數(shù)的表達(dá)式求值都在函數(shù)調(diào)用之前。這樣的調(diào)用形式 f{fields} 是一種語(yǔ)法糖用于表示 f({fields});這里指參數(shù)列表是一個(gè)單一的新創(chuàng)建出來(lái) 的列表。而這樣的形式 f39。string39。 (或是 fstring 亦或是 f[[string]])也是一種語(yǔ)法糖,用于表示 f(39。string39。);這里指參數(shù)列表是一個(gè)單獨(dú)的字符串。 因?yàn)楸磉_(dá)式語(yǔ)法在 Lua 中比較自由,所以你不能在函數(shù)調(diào)用的 39。(39。 前換行。這個(gè)限制可以避免語(yǔ)言中的一些歧義。比如你這樣寫 a = f (g).x(a) Lua 將把它當(dāng)作一個(gè)單一語(yǔ)句段, a = f(g).x(a) 。因此,如果你真的想作為成兩個(gè)語(yǔ)句段,你必須在它們之間寫上一個(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ù)是沒(méi)有限制的。然而,尾調(diào)用將刪除調(diào)用它的函數(shù)的任何調(diào)試信息。注意,尾調(diào)用只發(fā)生在特定的語(yǔ)法下,這時(shí), return 只有單一函數(shù)調(diào)用作為參數(shù);這種語(yǔ)法使得調(diào)用函數(shù)的結(jié)果可以精確返回。因此,下面這些例子都不是尾調(diào)用: return (f(x)) 返回值被調(diào)整為一個(gè) return 2 * f(x) return x, f(x) 最加若干返回值 f(x)。 return 無(wú)返回值 return x or f(x) 返回值被調(diào)整為一個(gè) 函數(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] 這樣的寫法: 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ù)編譯了。那么,無(wú)論何時(shí) Lua 執(zhí)行了函數(shù)定義,這個(gè)函數(shù)本身就被實(shí)例化了(或者說(shuō)是關(guān)閉了)。這個(gè)函數(shù)的實(shí)例(或者說(shuō)是 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ù)沒(méi)有被定義為接收不定長(zhǎng)參數(shù),即 在形參列表的末尾注明三個(gè)點(diǎn) (39。...39。),那么實(shí)參列表就會(huì)被調(diào)整到形參列表的長(zhǎng)度,變長(zhǎng)參數(shù)函數(shù)不會(huì)調(diào)整實(shí)參列表;取而代之的是,它將把所有額外的參數(shù)放在一起通過(guò)變長(zhǎng)參數(shù)表達(dá)式傳遞給函數(shù),其寫法依舊是三個(gè)點(diǎn)。這個(gè)表達(dá)式的值是一串實(shí)參值的列表,看起來(lái)就跟一個(gè)可以返回多個(gè)結(jié)果的函數(shù)一樣。如果一個(gè)變長(zhǎng)參數(shù)表達(dá)式放在另一個(gè)表達(dá)式中使用,或是放在另一串表達(dá)式的中間,那么它的返回值就會(huì)被調(diào)整為單個(gè)值。若這個(gè)表達(dá)式放在了一系列表達(dá)式的最后一個(gè),就不會(huì)做調(diào)整了(除非用括號(hào)給括了起來(lái))。 我們先做如下定義,然后再來(lái)看一個(gè)例子 : function f(a, b) end function g(a, b, ...) end
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1