Lua知識點四 編譯 執行 錯誤資訊

2021-08-01 15:13:56 字數 1051 閱讀 3388

lua當作解釋型語言,但是lua會首先把**預編譯成中間碼然後再執行(很多解釋型語言都是這麼做的)。在解釋型語言中存在編譯階段聽起來不合適,然而,解釋型語言的特徵不在於他們是否被編譯,而是編譯器是語言執行時的一部分,所以,執行編譯產生的中間碼速度會更快。

完成簡單的功能dofile比較方便,他讀入檔案編譯並且執行。然而loadfile更加靈活。在發生錯誤的情況下,loadfile返回nil和錯誤資訊,這樣我們就可以自定義錯誤處理。另外,如果我們執行乙個檔案多次的話,loadfile只需要編譯一次,但可多次執行。

loadstring函式功能強大,但使用時需多加小心。

另外,loadfile和loadstring都不會有邊界效應產生,他們僅僅編譯chunk成為自己內部實現的乙個匿名函式。

loadstring通常用於執行程式外部的**,比如執行使用者自定義的**。

lua提供高階的require函式來載入執行庫。

粗略的說require和dofile完成同樣的功能但有兩點不同:

1. require會搜尋目錄載入檔案

2. require會判斷是否檔案已經載入避免重複載入同一檔案。

require關注的問題只有分號(模式之間的分隔符)和問號,其他的資訊(目錄分隔符,副檔名)在路徑中定義。

require的另乙個功能是避免重複載入同乙個檔案兩次。lua保留一張所有已經載入的檔案的列表(使用table儲存)。

lua在乙個叫loadlib的函式內提供了所有的動態連線的功能。這個函式有兩個引數:庫的絕對路徑和初始化函式。

當lua遇到不期望的情況時就會丟擲錯誤,比如:兩個非數字進行相加;呼叫乙個非函式的變數;訪問表中不存在的值等

當函式遇到異常有兩個基本的動作:返回錯誤**或者丟擲錯誤。

如果在lua中需要處理錯誤,需要使用pcall函式封裝你的**。

pcall在保護模式(protected mode)下執行函式內容,同時捕獲所有的異常和錯誤。若一切正常,pcall返回true以及「被執行函式」的返回值;否則返回nil和錯誤資訊。

雖然你可以使用任何型別的值作為錯誤資訊,通常情況下,我們使用字串來描述遇到的錯誤。

lua錯誤資訊和回跟蹤(Tracebacks)

雖然你可以使用任何型別的值作為錯誤資訊,通常情況下,我們使用字串來描述遇到的錯誤。如果遇到內部錯誤 比如對乙個非table的值使用索引下標訪問 lua將自己產生錯誤資訊,否則lua使用傳遞給error函式的引數作為錯誤資訊。不管在什麼情況下,lua都盡可能清楚的描述問題發生的緣由。local sta...

C 編譯器錯誤資訊的Trick

http www.dinkumware.com exam default.aspx 獲得我們感興趣的資訊 比如結構對齊資訊,複雜物件型別等等 1 輸出巨集的內容 基本的思想就是利用c 中string literal不能作為模版引數的特性。通常編譯器會將string literal的內容也一併輸出。下...

編譯器錯誤資訊 CS0016

編譯器錯誤資訊 cs0016 未能寫入輸出檔案 c windows microsoft.net framework v2.0.50727 temporary asp.net files 安裝完 framework 3.0 之後,出現 不能訪問 c windows microsoft.net fram...