保護模式.jpg
前言
作為苦逼的程序猿大周末的時候也必須不能忘記學習,今天我們來看一個調用其他函數的函數,這個函數其實就是給其他函數提供一個保護環境,保護程序可以不被意外終止,可以順利的執行下去,我們一起來看一下這個函數的用法吧。
內容
pcall()
- 原型:pcall(f, arg1, ···)
- 解釋:在一個保護模式下調用參數
f
指定的函數。這意味著在函數f
中發生的錯誤都不會被拋出,相反,函數pcall
會捕獲發生的錯誤然后返回一個錯誤狀態,函數的第一個返回值是一個表示錯誤狀態的布爾變量,當被調用函數被成功調用并且沒有錯誤時,函數返回true
作為第一個返回值,并且依次返回被調用函數的所有返回值,當發生錯誤時,函數會返回一個false
并且緊跟著錯誤信息。
usage
- 首先我們新建一個文件將文件命名為pcalltest.lua然后編寫代碼如下:
-- 打印一下苦逼的程序猿時間
print("\nnow time is "..os.date())
local function add_num(num1, num2)
return num1 + num2;
end
-- 打印函數正常調用
print("\ntest function add_num reault:")
print(pcall(add_num, 3, 5))
-- 打印可能出現問題的函數
print("\ntest function add_num reault:")
print(pcall(add_num, 3, "what"))
- 運行結果(今天在家加班,運行環境有點問題,找了一個在線運行的湊活著看吧)
base_pcall.png
總結
- 從結果可以看出函數第一個返回值就是一個表示函數執行狀態的布爾值。
- 由函數兩次運行可以看出,不管被調用函數是否發生錯誤,函數都不會中斷。
- 這個函數可以為被執行函數提供一個保護模式,保證程序不會意外終止。
- 還有這個時間打印的其實是格林威治時間,實際上現在已經
2016-09-04 22:37:56
。