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

正文內容

lua5參考手冊(編輯修改稿)

2024-12-11 08:23 本頁面
 

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