好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Lua極簡入門指南(三): loadfile和錯誤處理

Lua極簡入門指南(三): loadfile和錯誤處理

熱門標簽:武漢外呼防封系統多少錢 清朝地圖標注哈爾濱 漳州智云呼電話機器人 怎么去除地圖標注 新岸線智能電銷機器人 個人怎么在地圖標注需要的店鋪 百度地圖標注早餐區域 地圖標注大廈 冀州市地圖標注

編譯

Lua 雖然是解釋性語言,但 Lua 源碼總是被編譯為中間形式后再執行。

dofile 用于載入并執行一個 Lua 文件,相比之下,loadfile 用于載入一個 Lua 文件,但并不執行,確切的說 loadfile 編譯了一個 chunk,并返回此被編譯的 chunk(被作為一個函數):

復制代碼 代碼如下:

c = loadfile('./test.lua')
c()

dofile 可以被實現為:

復制代碼 代碼如下:

function dofile(filename)
    local f = assert(loadfile(filename))
    return f()
end

一個類似 loadfile 的函數 load,它使用字符串(而非文件)作為參數,返回被編譯的 chunk:

復制代碼 代碼如下:

f = load('i = i + 1')
i = 0
f(); print(i)  --> 1
f(); print(i)  --> 2

另外,我們可以使用命令 luac 來直接編譯 Lua 文件:

復制代碼 代碼如下:

luac -o prog.lc prog.lua
lua prog.lc

錯誤

Lua 遇見任何不可接受的條件時會產生錯誤。例如:

復制代碼 代碼如下:

local t = {}
-- 出錯
t = t + 1

我們可以顯式的調用 error 函數來產生一個錯誤,error 接受一個錯誤消息作為參數:

復制代碼 代碼如下:

print 'enter a number:'
n = io.read('*n')
if not n then error('invalid input') end

assert 函數也可以產生錯誤。assert 函數檢查第一個參數是否為 false,如果不為 false 就返回此參數,如果為 false 就產生一個錯誤。assert 的第二個參數,錯誤消息,是可選的。范例:

復制代碼 代碼如下:

n = io.read()
assert(tonumber(n), 'invalid input: ' .. n .. ' is not a number')

pcall 函數可以捕獲錯誤:
復制代碼 代碼如下:

local ok, msg = pcall(function()
    assert(false)
end)
 
print(ok, msg)

pcall 函數使用保護模式(protected mode)調用第一個參數(此參數為一個函數),如果被調用的函數執行不存在錯誤,pcall 返回 true 并返回被調用函數的所有返回值,如果被調用的函數產生了錯誤,pcall 返回 false 并附帶上錯誤消息。嚴格來說,錯誤消息不一定需要是字符串:

復制代碼 代碼如下:

local ok, err = pcall(function()
    error({code = 502})
end)
 
print(err.code)

追蹤錯誤

我們先看一個函數:

復制代碼 代碼如下:

function foo(str)
    if type(str) ~= 'string' then
        error('string expected')
    end
    -- ...
end
 
foo(1)

foo 函數需要一個字符串參數,我們執行上面的代碼:

復制代碼 代碼如下:

lua: test.lua:3: string expected

輸出指出了錯誤出現在 foo 函數中(因為 foo 函數調用了 error),而實際上,錯誤是 foo 的調用者產生的,而非 foo 產生的。我們可以設置 level 來修正這個報錯:

復制代碼 代碼如下:

function foo(str)
    if type(str) ~= 'string' then
        error('string expected', 2)
    end
    -- ...
end

error 函數的第二個參數為 level,用于指定報錯的位置,level 值為 1 表示 error 的調用者,值為 2 表示 error 的調用者的調用者,以此類推。

pcall 只能返回錯誤消息,很多時候我們需要完整的調用棧,這時可以使用 xpcall 函數。xpcall 函數可以接收一個消息 handler 作為參數,在被調用函數出現錯誤時,消息 handler 會被調用,通過其就可以獲取到當前調用棧的信息。

您可能感興趣的文章:
  • Lua腳本語言簡明入門教程
  • Lua極簡入門指南(一):基礎知識篇
  • Lua極簡入門指南(一):函數篇
  • Lua極簡入門指南:全局變量
  • lua腳本語言快速入門教程
  • Lua入門學習筆記
  • Lua極簡入門指南(六):模塊
  • Lua 極簡入門指南(七):面向對象編程
  • Lua腳本語言基本語法快速入門教程
  • Lua語言新手簡單入門教程

標簽:德宏 宣城 濰坊 金昌 天門 儋州 臺灣 天門

巨人網絡通訊聲明:本文標題《Lua極簡入門指南(三): loadfile和錯誤處理》,本文關鍵詞  Lua,極簡,入門,指南,三,loadfile,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua極簡入門指南(三): loadfile和錯誤處理》相關的同類信息!
  • 本頁收集關于Lua極簡入門指南(三): loadfile和錯誤處理的相關信息資訊供網民參考!
  • 推薦文章