婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua中簡單的錯誤處理實例

Lua中簡單的錯誤處理實例

熱門標簽:武漢百應人工智能電銷機器人 百度地圖標注位置網站 電腦外呼系統輻射大嗎 如何利用高德地圖標注家 上海企業外呼系統排名 揚州電銷外呼系統軟件 智能語音電銷的機器人 開通400電話申請流程 400手機電話免費辦理

昨天遇到另外一位獨立游戲開發者,所以多聊了一會,然后…然后就沒有看書了。(小若:借口!借口!)
 
今天來聊聊錯誤處理吧,不過畢竟這只是前面的章節,書上的內容似乎有點一筆帶過的味道。

沒關系,簡單更好~

1.紅色警報——error

我們應該能經常看到類似以下的錯誤信息:

復制代碼 代碼如下:

[LUA-print] LUA ERROR: [string "src/main.lua"]:108: [string "src/main.lua"]:89: attempt to index global ‘a' (a nil value)

這是在發生錯誤時給我們的提示,通常,這代表我們的代碼不能繼續正常執行下去了。
 
但你有知不知道,我們可以偽造這種錯誤,沒錯,主動調用error函數,就會出現這種信息。
如下代碼:
復制代碼 代碼如下:

    error("你的智商不多了,趕緊休息,恢復一下吧");

然后,運行,輸出如下信息:

復制代碼 代碼如下:

[LUA-print] LUA ERROR: [string "src/main.lua"]:109: [string "src/main.lua"]:96: 你的智商不多了,趕緊休息,恢復一下吧

這太厲害了,以后你看誰不爽,就往他代碼里塞上這句話吧,比如在項目上線前塞進去~
 
言歸正傳,當我們在調用一個函數之前,可以先判斷即將傳遞的參數是否正常,如果不正常,我們就可以選擇直接拋出error,方便寫代碼的過程中發現問題。

比如下面的代碼:

復制代碼 代碼如下:

    local name = io.read();
    if name ~= "笨木頭" then
        error("你是一個非常善良有愛心的人,我很喜歡你..所以,去死吧!");
    end

只要發現輸入的內容不是“笨木頭”,就狠狠地拋出異常。

2.偷個懶——assert

類似剛剛那種判斷錯誤的代碼,似乎有點啰嗦,于是,我們可以用assert代替形如if not then的代碼。

比如上面的代碼改為:

復制代碼 代碼如下:

    local name = io.read();
    local result = assert(name == "笨木頭", "你是一個非常善良有愛心的人,我很喜歡你..所以,去死吧!");

如果assert的第一個參數為不為false,則返回第一個參數的值;否則,執行error函數,輸出錯誤信息,錯誤信息的內容為assert的第二個參數。

輸出結果和之前是一樣的~

3.捕獲錯誤代碼——pcall

如果在錯誤發生時,我們不希望代碼停止運行,而是做一些緊急措施,那么,可以使用pcall捕獲錯誤。
如以下代碼:

復制代碼 代碼如下:

    function test()
        print(a[1]);
    end
    if pcall(test) then
        print("正常,呵呵");
    else
        print("哎,函數出錯了,我正在幫你處理,放心吧,等我睡醒就...不是,等你睡醒就沒事了~");
      
    end

函數test執行的時候肯定會報錯的,因為并不存在a這個table。
使用pcall調用test函數,如果test不報錯,則pcall返回ture,否則,返回false。
利用這個特性,我們就可以捕獲異常,做一些緊急處理。

運行代碼, 輸出結果如下:

復制代碼 代碼如下:

[LUA-print] 哎,函數出錯了,我正在幫你處理,放心吧,等我睡醒就…不是,等你睡醒就沒事了~
這緊急處理的方式還挺不錯的,呵呵。(小若:不錯你個頭啊!這和沒處理有差別嗎?)

pcall除了會返回true或者false外,還能返回函數的錯誤信息,如下代碼:
復制代碼 代碼如下:

    function test()
        print(a[1]);
    end
    local status, err = pcall(test);
    if status then
        print("正常,呵呵");
    else
        print("哎,函數出錯了,我正在幫你處理,放心吧,等我睡醒就...不是,等你睡醒就沒事了~");
        print(err);
    end

pcall的第一個返回值和之前一樣,true或者false。

而第二個參數則是test函數拋出的錯誤信息,執行代碼,結果如下:

復制代碼 代碼如下:

[LUA-print] 哎,函數出錯了,我正在幫你處理,放心吧,等我睡醒就…不是,等你睡醒就沒事了~
[LUA-print] [string "src/main.lua"]:94: attempt to index global ‘a' (a nil value)

4.結束

關于錯誤處理,好像沒有什么好玩的東西,所以,就寫這么多吧~

您可能感興趣的文章:
  • Lua中的異常處理pcall、xpcall、debug使用實例
  • Lua函數與字符串處理簡明總結
  • Lua極簡入門指南(三): loadfile和錯誤處理
  • Lua讀取和寫入文件處理例子
  • 淺析Lua編程中的異常處理
  • lua日志文件處理代碼

標簽:宜賓 張掖 黑龍江 延邊 武漢 江西 嘉峪關 新余

巨人網絡通訊聲明:本文標題《Lua中簡單的錯誤處理實例》,本文關鍵詞  Lua,中,簡單,的,錯誤,處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中簡單的錯誤處理實例》相關的同類信息!
  • 本頁收集關于Lua中簡單的錯誤處理實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 陈巴尔虎旗| 乐陵市| 肇东市| 柳河县| 龙里县| 鹤山市| 通河县| 宁明县| 美姑县| 克山县| 丰都县| 龙游县| 灵璧县| 潼关县| 读书| 建昌县| 平顺县| 屯留县| 洪洞县| 财经| 盐山县| 汤阴县| 锦屏县| 屏山县| 长垣县| 西乡县| 五峰| 东丰县| 长顺县| 武川县| 天柱县| 龙州县| 无锡市| 扶余县| 金阳县| 新乡县| 黎川县| 武平县| 佛山市| 大连市| 静安区|