加載.png
前言
今天這個函數是一個非常非常危險的函數,我的電腦今天因為這個函數崩潰了兩次苞慢,奇怪的是這個函數雖然在lua5.1的版本說明文檔里艾扮,但是網上卻幾乎找不到關于它的任何用法掉盅。即使有個別的使用方法,在我的這個版本Lua5.1里也是運行不了的赃阀,提示語法錯誤霎肯。記過幾番周折我終于試著寫出了一種使用方式,但是我看不出他究竟有什么使用價值榛斯,我們還是一起來看一下吧观游。
內容
load
- 原型:load(func [, chunkname])
- 解釋:使用參數
func
所指定的函數來加載程序塊來獲得程序片段,每一次調用函數func
必須返回一個字符串驮俗,這個字符串連接了先前調用的結果懂缕,如果返回一個空串""
、nil
王凑、或者不返回值都標志著程序塊的結束搪柑。 - 如果沒有錯誤函數會返回編譯好的程序塊作為一個函數,否則將會返回nil和錯誤信息索烹,函數的運行環(huán)境是全局環(huán)境工碾,參數
chunkname
通常被用來作為錯誤信息和調試信息使用,當省略時默認為"(load)" 术荤。
usage
- 首先我們新建一個文件將文件命名為loadtest.lua然后編寫代碼如下:
-- 用來計數調用次數
local n = 0
-- 用來作為可以影響的變量
w = 0
-- 被掉函數
local function test(w)
n = n + 1;
print("test load function "..n.." times")
if n > 10 then
return nil
else
return "w = w + 1;"
end
end
-- 輸出被調函數
print("\ntest function is", test, "\n")
-- 運行l(wèi)oad
local retfunc = load(test, "use test")
-- 輸出結果函數
print("\nretfunc function is", retfunc)
-- 輸出影響的變量
print("\nbefore use function ret func, w = "..w)
-- 調用結果函數
retfunc()
-- 輸出影響的變量
print("\nafter use function ret func, w = "..w)
local function func_error()
return "1+1"
end
print("\nsecond load", load(func_error, "use func_error"))
- 運行結果
base_load.png
總結
- 先說說這個函數為什么把我的電腦整崩潰了倚喂,原因是一開始不會用,在網上費了好長時間找了一個程序瓣戚,寫完代碼測試——死循環(huán)了端圈,一般的死循環(huán)沾滿一個CPU,這個程序可倒好子库,4個CPU全是100%舱权,導致電腦崩潰了。
- 它出現死循環(huán)的原因就是由于他的結束條件仑嗅,它會不斷的調用函數
func
宴倍,知道它返回空串张症、nil
或者是不返回,可是一般寫好的函數鸵贬,怎么會突然不返回俗他,結果一直返回就死循環(huán)了。 - 再說說返回值中代碼塊使用的變量
w
居然得是全局變量阔逼,否則編譯不過去兆衅,我不知道這么做有什么意義。 - 最后生成函數的代碼里相當于有10句
w = w +1;
代碼嗜浮,由運行結果也證實了這一點羡亩。 - 運行到最后我還是不明白這個函數究竟應該運用在什么場景下,請知道原因的大神們得我指點一下危融,謝謝了畏铆。