Lua的編譯 執行和除錯技術介紹

2022-09-26 18:30:19 字數 1555 閱讀 8543

dofile讀入檔案編譯並執行,真正完成功能的函式是loadfile;與dofile不同,loadfile僅僅是編譯**成中間碼,並且把編譯後的chunk作為函式返回。如果發生dqcwoa錯誤,返回nil和錯誤資訊。我們可以這麼定義dofile:

複製** **如下:

function dofile(filename)

local f = assert(loadfile(filename))

return f()

end程式設計客棧如果你只呼叫一次,可以使用dofile(filename),如果是呼叫多次,可以f = loadfile(filename); f();f()...

loadstring與loadfile相似,只不過他是從乙個串中讀入。

lua中函式定義發生在執行時而不是編譯時。

複製** **如下:

f = loadstring("i=i+1")

與f = function() i = i+1 end等價。但loadstring不關心詞法範圍:

i = 3程式設計客棧3

local i = 0;

f = loadstring("i=i+1")

g = function() i = i+1 end

g使用的是區域性變數i,而f使用的是全域性變數i,因為f總是在全域性環境下編譯。

犯錯是人的本性,因此我們必須以最佳的方式來處理錯誤。lua作為擴充套件語言,經常嵌入到其他應用,當錯誤發生時,不能簡單的crash或exit。

複製** **如下:

print "enter a number:"

n = io.read("*number")

if not n then error("invalid input") end

if not condition then error end 的組合太普遍了以至於lua專門內建了乙個函式來做這工作,這個函式就是assert。

通常,當異常發生時,你有兩個方式處理,要麼返回錯誤碼(nil),要麼報錯(error)。對於這兩種方式,並沒有固定的準則來做選擇。但是我們提供通用的原則:容易避免的異常應該報錯,否則返回異常。舉例說明:

math.sin接受個number型的弧度值,如果引數不是number,我們應該報錯,而不是返回錯誤碼。假設我們是返回錯誤碼,那麼我們使用就得這樣:

複製** **如下:

local res = math.sin(x)

if not res then

其實,我們可以很容易地檢測這個異常,在呼叫sin之前:

複製** **如下:

if not tonumber(x) then

通常,我們是既不檢測sin的引數,也不檢測sin的返回值。如果引數不是number,往往是我們**自身出問題了。這種情況下,停止執行並報錯是最簡單也是最實用的方式。

相反的,io.open這個函式,就不存在簡單的在呼叫open之前就檢測出異常的方法。開啟失敗可能是因為檔案不存在,或許可權不夠。通過返回錯誤碼,你可以採用適當的方式來處理,比如讓使用者輸入另乙個檔名。

本文標題: lua的編譯、執行和除錯技術介紹

本文位址: /jiaoben/lua/123320.html

lua編譯和執行

lua dofile 用於執行lua 塊.但實際上loadfile才做了核心的工作.loadfile會從乙個檔案中載入lua 塊,但它不會執行 只是編譯 然後將編譯結果作為乙個函式返回。function dofile filename local f assert loadfile filename...

lua的編譯 執行

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!lua是乙個指令碼語言,它的編譯器非常簡單。一般而言,lua在遊戲裡面使用得比較多。它可以通過類似於指令碼的形式把函式的功能序列起來,實現很多不可思議的效果。現在關於lua的資料比較少,主要有兩個文件可以介紹一下。乙個是雲風翻譯的lua手冊,另外一...

Debian下編譯 執行和除錯C 程式

本人使用的是debian 6.04testing版 首先安裝g 需要root許可權 gksu apt get install g 安裝完成後會出現 update alternatives 使用 usr bin g 來提供 usr bin c c 於 自動模式 中。編寫測試程式 include usi...