麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

Lua的編譯、執行和調試技術介紹

2024-07-21 23:04:40
字體:
來源:轉載
供稿:網友

dofile讀入文件編譯并執行,真正完成功能的函數是loadfile;與dofile不同,loadfile僅僅是編譯代碼成中間碼,并且把編譯后的chunk作為函數返回。如果發生錯誤,返回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 = 33
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
     <error handling>

其實,我們可以很容易地檢測這個異常,在調用sin之前:
復制代碼 代碼如下:

if not tonumber(x) then
     <error handling>

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

 

相反的,io.open這個函數,就不存在簡單的在調用open之前就檢測出異常的方法。打開失敗可能是因為文件不存在,或權限不夠。通過返回錯誤碼,你可以采用適當的方式來處理,比如讓用戶輸入另一個文件名。

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一区二区三区四区精品 | 欧美日韩大片在线观看 | 久久久国产一区二区三区 | 成人免费午夜视频 | 色玖玖综合 | 欧洲成人综合网 | 久久亚洲春色中文字幕久久 | 护士hd欧美free性xxxx | 双性精h调教灌尿打屁股的文案 | 欧美成人做爰高潮片免费视频 | 成年毛片 | caoporn国产一区二区 | 日韩欧美激情视频 | 色婷婷一区二区三区 | 91在线视频网址 | 精品一区免费 | 日韩色视频在线观看 | 国产1区2区在线观看 | 久久久综合久久久 | 免费欧美一级视频 | 久久久经典视频 | av在线看网站 | 欧美人与性禽动交精品 | av在线免费观看不卡 | 国产精品视频免费在线观看 | 日韩在线播放第一页 | 亚洲骚图 | 久久精品一区视频 | 女教师~淫辱の动漫在线 | 国产资源在线视频 | 免费a级毛片永久免费 | www.91sese| 日韩精品久久久久久久九岛 | 日韩精品久久久久久久电影99爱 | xxxxxx打针视频vk | 草草视频免费 | 日本aⅴ在线 | 毛片在线免费观看完整版 | 久久精品国产99国产精品澳门 | 国产在线欧美日韩 | 精品亚洲二区 |