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

正文內(nèi)容

lua51參考手冊(已修改)

2025-06-17 19:10 本頁面
 

【正文】 Lua 參考手冊1 介紹Lua 是一個擴展式程序設(shè)計語言,它被設(shè)計成支持通用的過程式編程,并有相關(guān)數(shù)據(jù)描述的設(shè)施。 Lua 也能對面向?qū)ο缶幊?,函?shù)式編程,數(shù)據(jù)驅(qū)動式編程提供很好的支持。它可以作為一個強大、輕量的腳本語言,供任何需要的程序使用。 Lua 以一個用 clean C 寫成的庫形式提供。(所謂 Clean C ,指的 ANSI C 和 C++ 中共通的一個子集) 作為一個擴展式語言,Lua 沒有 main 程序的概念:它只能 嵌入 一個宿主程序中工作,這個宿主程序被稱作 embedding program 或簡稱為 host 。宿主程序可以通過調(diào)用函數(shù)執(zhí)行一小段 Lua 代碼,可以讀寫 Lua 變量,可以注入 C 函數(shù)讓 Lua 代碼調(diào)用。這些擴展的 C 函數(shù),可以大大的擴展了 Lua 可以處理事務(wù)的領(lǐng)域,這樣就可以訂制出各種語言,而它們共享一個統(tǒng)一的句法格式的框架。 Lua 的官方發(fā)布版就包含了一個叫做 lua 的簡單的宿主程序,它用 Lua 庫提供了一個保證獨立的 Lua 解釋器。 Lua 是一個自由軟件,它的使用許可決定了對它的使用過程一般沒有任何保證。這份手冊中描述的東西的實現(xiàn),可以在 Lua 的官方網(wǎng)站 找到, 跟其它的許多參考手冊一樣,這份文檔有些地方比較枯燥。關(guān)于 Lua 的設(shè)計想法的探討,可以看看 Lua 網(wǎng)站上提供的技術(shù)論文。有關(guān)用 Lua 編程的細(xì)節(jié)介紹,可以讀一下 Roberto 的書,Programming in Lua (Second Edition) 。 2 語言這一節(jié)從詞法、語法、句法上描述 Lua 。換句話說,這一節(jié)描述了哪些 token (符記)是有效的,它們?nèi)绾伪唤M合起來,這些組合方式有什么含義。 關(guān)于語言的構(gòu)成概念將用常見的擴展 BNF 表達(dá)式寫出。也就是這個樣子: {a} 意思是 0 或多個 a , [a] 意思是一個可選的 a 。非最終的符號會保留原來的樣子,關(guān)鍵字則看起來像這樣 kword ,其它最終的符號則寫成 `=180。 。完整的 Lua 語法可以在本手冊最后找到。 詞法約定Lua 中用到的 名字(也稱作 標(biāo)識符)可以是任何非數(shù)字開頭的字母、數(shù)字、下劃線組成的字符串。這符合幾乎所有編程語言中關(guān)于名字的定義。(字母的定義依賴于當(dāng)前環(huán)境:系統(tǒng)環(huán)境中定義的字母表中的字母都可以被用于標(biāo)識符。)標(biāo)識符用來命名變量,或作為表的域名。 下面的關(guān)鍵字是保留的,不能用作名字: and break do else elseif end false for function if in local nil not or repeat return then true until whileLua 是一個大小寫敏感的語言: and 是一個保留字,但是 And 和 AND 則是兩個不同的合法的名字。一般約定,以下劃線開頭連接一串大寫字母的名字(比如 _VERSION)被保留用于 Lua 內(nèi)部全局變量。 下面這些是其它的 token : + * / % ^ == ~= = = = ( ) { } [ ] 。 : , . .. ...字符串既可以用一對單引號引起,也可以是雙引號,里面還可以包含類似 C 的轉(zhuǎn)義符: 39。\a39。 (響鈴), 39。\b39。 (退格), 39。\f39。 (表單), 39。\n39。 (換行), 39。\r39。 (回車), 39。\t39。 (橫向制表), 39。\v39。 (縱向制表), 39。\\39。 (反斜杠), 39。\39。 (雙引號),以及 39。\39。39。 (單引號)。而且,如果在一個反斜杠后跟了一個真正的換行符,其結(jié)果就是在字符串中產(chǎn)生一個換行符。我們還可以用反斜杠加數(shù)字的形式 \ddd 來描述一個字符。這里, ddd 是一串最多三位的十進制數(shù)字。(注意,如果需要在這種描述方法后接一個是數(shù)字的字符,那么反斜杠后必須寫滿三個數(shù)字。)Lua 中的字符串可以包含任何 8 位的值。包括用 39。\039。 表示的零。 只有在你需要把不同的引號、換行、反斜杠、或是零結(jié)束符這些字符置入字符串時,你才必須使用轉(zhuǎn)義符。別的任何字符都可以直接寫在文本里。(一些控制符可以會影響文件系統(tǒng)造成某些問題,但是不會引起 Lua 的任何問題。) 字符串還可以用一種長括號括起來的方式定義。我們把兩個正的方括號間插入 n 個等號定義為第 n 級正長括號。就是說,0 級正的長括號寫作 [[ ,一級正的長括號寫作 [=[ ,如此等等。反的長擴展也作類似定義;舉個例子,4 級反的長括號寫作 ]====] 。一個長字符串可以由任何一級的正的長括號開始,而由第一個碰到的同級反的長括號結(jié)束。整個詞法分析過程將不受分行限制,不處理任何轉(zhuǎn)意符,并且忽略掉任何不同級別的長括號。這種方式描述的字符串可以包含任何東西,當(dāng)然特定級別的反長括號除外。 另一個約定是,當(dāng)正的長括號后面立即跟了一個換行符,這個換行符就不包含在這個字符串內(nèi)。舉個例子,假設(shè)一個系統(tǒng)使用 ASCII 碼(這時,39。a39。 編碼為 97 ,換行符編碼為 10 ,39。139。 編碼為 49 ),下面五種方式描述了完全相同的字符串: a = 39。alo\n12339。 a = alo\n123\ a = 39。\97lo\10\0492339。 a = [[alo 123]] a = [==[ alo 123]==]數(shù)字常量可以分兩部分寫,十進制底數(shù)部分和十進制的指數(shù)部分。指數(shù)部分是可選的。 Lua 也支持十六進制整數(shù)常量,只需要在前面加上前綴 0x 。下面是一些合法的數(shù)字常量的例子: 3 0xff 0x56注釋可以在除字符串內(nèi)的任何地方是以兩橫 () 開始。如果跟在兩橫后面的不是一個長括號,這就是一個短注釋,它的作用范圍直到行末;否則就是一個長注釋,其作用范圍直到遇到反的長括號。長注釋通常被用來臨時屏蔽代碼塊。 值與類型Lua 是一種 動態(tài)類型語言。這意味著變量沒有類型,只有值才有類型。語言中不存在類型定義。而所有的值本身攜帶它們自己的類型信息。 Lua 中的所有值都是一致 (firstclass) 的。這意味著所有的值都可以被放在變量里,當(dāng)作參數(shù)傳遞到另一個函數(shù)中,并被函數(shù)作為結(jié)果返回。 Lua 中有八種基本類型: nil, boolean, number, string, function, userdata, thread, and table. Nil 類型只有一種值 nil ,它的主要用途用于標(biāo)表識和別的任何值的差異;通常,當(dāng)需要描述一個無意義的值時會用到它。 Boolean 類型只有兩種值:false 和 true。 nil 和 false 都能導(dǎo)致條件為假;而另外所有的值都被當(dāng)作真。 Number 表示實數(shù)(雙精度浮點數(shù))。(編譯一個其它內(nèi)部數(shù)字類型的 Lua 解釋器是件很容易的事;比如把內(nèi)部數(shù)字類型改作單精度浮點數(shù)或長整型。參見文件 。) String 表示一串字符的數(shù)組。 Lua 是 8bit clean 的:字符串可以包含任何 8 位字符,包括零結(jié)束符 (39。\039。) (參見 167。)。 Lua 可以調(diào)用(和處理)用 Lua 寫的函數(shù)以及用 C 寫的函數(shù)(參見 167。). userdata 類型用來將任意 C 數(shù)據(jù)保存在 Lua 變量中。這個類型相當(dāng)于一塊原生的內(nèi)存,除了賦值和相同性判斷,Lua 沒有為之預(yù)定義任何操作。然而,通過使用 metatable (元表) ,程序員可以為 userdata 自定義一組操作(參見 167。)。 userdata 不能在 Lua 中創(chuàng)建出來,也不能在 Lua 中修改。這樣的操作只能通過 C API。這一點保證了宿主程序完全掌管其中的數(shù)據(jù)。 thread 類型用來區(qū)別獨立的執(zhí)行線程,它被用來實現(xiàn) coroutine (協(xié)同例程)(參見 167。)。不要把 Lua 線程跟操作系統(tǒng)的線程搞混。 Lua 可以在所有的系統(tǒng)上提供對 coroutine 的支持,即使系統(tǒng)并不支持線程。 table 類型實現(xiàn)了一個關(guān)聯(lián)數(shù)組。也就是說,數(shù)組可以用任何東西(除了nil)做索引,而不限于數(shù)字。 table 可以以不同類型的值構(gòu)成;它可以包含所有的類型的值(除 nil 外)。 table 是 lua 中唯一的一種數(shù)據(jù)結(jié)構(gòu);它可以用來描述原始的數(shù)組、符號表、集合、記錄、圖、樹、等等。用于表述記錄時,lua 使用域名作為索引。語言本身采用一種語法糖,支持以 的形式表示 a[name]。有很多形式用于在 lua 中創(chuàng)建一個 table (參見 167。)。 跟索引一樣, table 每個域中的值也可以是任何類型(除 nil外)。特別的,因為函數(shù)本身也是值,所以 table 的域中也可以放函數(shù)。這樣 table 中就可以有一些 methods 了 (參見see 167。)。 table, function ,thread ,和 (full) userdata 這些類型的值是所謂的對象:變量本身并不會真正的存放它們的值,而只是放了一個對對象的引用。賦值,參數(shù)傳遞,函數(shù)返回,都是對這些對象的引用進行操作;這些操作不會做暗地里做任何性質(zhì)的拷貝。 庫函數(shù) type 可以返回一個描述給定值的類型的字符串。 強制轉(zhuǎn)換Lua 提供運行時字符串到數(shù)字的自動轉(zhuǎn)換。任何對字符串的數(shù)學(xué)運算操作都會嘗試用一般的轉(zhuǎn)換規(guī)則把這個字符串轉(zhuǎn)換成一個數(shù)字。相反,無論何時,一個數(shù)字需要作為字符串來使用時,數(shù)字都會以合理的格式轉(zhuǎn)換為字符串。需要完全控制數(shù)字怎樣轉(zhuǎn)換為字符串,可以使用字符串庫中的 format 函數(shù)(參見 )。 變量寫上變量的地方意味著當(dāng)以其保存的值來替代之。 Lua 中有三類變量:全局變量,局部變量,還有 table 的域。 一個單一的名字可以表示一個全局變量,也可以表示一個局部變量 (或者是一個函數(shù)的參數(shù),這是一種特殊形式的局部變量): var ::= NameName 就是 167。 中所定義的標(biāo)識符。 任何變量都被假定為全局變量,除非顯式的以 local 修飾定義 (參見 167。)。局部變量有其作用范圍:局部變量可以被定義在它作用范圍中的函數(shù)自由使用(參見 167。)。 在變量的首次賦值之前,變量的值均為 nil。 方括號被用來對 table 作索引: var ::= prefixexp `[180。 exp `]180。對全局變量以及 table 域之訪問的含義可以通過 metatable 來改變。以取一個變量下標(biāo)指向的量 t[i] 等價于調(diào)用 gettable_event(t,i)。(參見 167。 ,有一份完整的關(guān)于 gettable_event 函數(shù)的說明。這個函數(shù)并沒有在 lua 中定義出來,也不能在 lua 中調(diào)用。這里我們把它列出來只是方便說明。) 這種語法只是一個語法糖,用來表示 var[Name]: var ::= prefixexp `.180。 Name所有的全局變量都是放在一個特定 lua table 的諸個域中,這個特定的 table 叫作 environment (環(huán)境)table 或者簡稱為 環(huán)境 (參見 167。)。每個函數(shù)都有對一個環(huán)境的引用,所以一個函數(shù)中可見的所有全局變量都放在這個函數(shù)所引用的環(huán)境表(environment table)中。當(dāng)一個函數(shù)被創(chuàng)建出來,它會從創(chuàng)建它的函數(shù)中繼承其環(huán)境,你可以調(diào)用 getfenv 取得其環(huán)境。如果想改變環(huán)境,可以調(diào)用 setfenv。(對于 C 函數(shù),你只能通過 debug 庫來改變其環(huán)境;參見 167。)。 對一個全局變量 x 的訪問等價于 ,而這又可以等價于 gettable_event(_env, x)這里,_env 是當(dāng)前運行的函數(shù)的環(huán)境。(函數(shù) gettable_event 的完整說明參見 167。這個函數(shù)并沒有在 lua 中定義出來,也不能調(diào)用。當(dāng)然,_env 這個變量也同樣沒有在 Lua 中定義出來。我們在這里使用它們,僅僅只是方便解釋而已。) 語句段(Statement)Lua 支持慣例形式的語句段,它和 Pascal 或是 C 很相象。這個集合包括賦值,控制結(jié)構(gòu),函數(shù)調(diào)用,還有變量聲明。 Chunk(語句組)Lua 的一個執(zhí)行單元被稱作 chunk。一個 chunk 就是一串語句段,它們會被循序的執(zhí)行。每個語句段可以以一個分號結(jié)束: chunk ::= {stat [`。180。]}這兒不允許有空的語句段,所以 39。39。 是非法的。 lua 把一個 chunk 當(dāng)作一個擁有不定參數(shù)的匿名函數(shù)(參見 167。)處理。正是這樣,chunk 內(nèi)可以定義局部變量,接收參數(shù),并且返回值。 chunk 可以被保存在一個文件中,也可以保存在宿主程序的一個字符串中。當(dāng)一個 chunk 被執(zhí)行,首先它會被預(yù)編譯成虛擬機中的指令序列,然后被虛擬機解釋運行這些指令。 chunk 也可以被預(yù)編譯成二進制形式;細(xì)節(jié)參考程序 luac。用源碼形式提供的程序和被編譯過的二進制形式的程序是可以相互替換的; Lua 會自動識別文件類型并做正確的處理。 語句塊語句塊是一列語句段;從語法上來說,一個語句塊跟一個 chunk 相同: block ::= chunk一個語句塊可以被顯式的寫成一個單獨的語句段: stat ::= do block end顯式的語句塊對于控制變量的作用范圍很有用。有時候,顯式的語句塊被用來在另一個語句塊中插
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1