
加載.png
前言
今天這個(gè)函數(shù)是一個(gè)非常非常危險(xiǎn)的函數(shù),我的電腦今天因?yàn)檫@個(gè)函數(shù)崩潰了兩次,奇怪的是這個(gè)函數(shù)雖然在lua5.1的版本說明文檔里,但是網(wǎng)上卻幾乎找不到關(guān)于它的任何用法。即使有個(gè)別的使用方法,在我的這個(gè)版本Lua5.1里也是運(yùn)行不了的,提示語法錯(cuò)誤。記過幾番周折我終于試著寫出了一種使用方式,但是我看不出他究竟有什么使用價(jià)值,我們還是一起來看一下吧。
內(nèi)容
load
- 原型:load(func [, chunkname])
- 解釋:使用參數(shù)
func所指定的函數(shù)來加載程序塊來獲得程序片段,每一次調(diào)用函數(shù)func必須返回一個(gè)字符串,這個(gè)字符串連接了先前調(diào)用的結(jié)果,如果返回一個(gè)空串""、nil、或者不返回值都標(biāo)志著程序塊的結(jié)束。 - 如果沒有錯(cuò)誤函數(shù)會(huì)返回編譯好的程序塊作為一個(gè)函數(shù),否則將會(huì)返回nil和錯(cuò)誤信息,函數(shù)的運(yùn)行環(huán)境是全局環(huán)境,參數(shù)
chunkname通常被用來作為錯(cuò)誤信息和調(diào)試信息使用,當(dāng)省略時(shí)默認(rèn)為"(load)" 。
usage
- 首先我們新建一個(gè)文件將文件命名為loadtest.lua然后編寫代碼如下:
-- 用來計(jì)數(shù)調(diào)用次數(shù)
local n = 0
-- 用來作為可以影響的變量
w = 0
-- 被掉函數(shù)
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
-- 輸出被調(diào)函數(shù)
print("\ntest function is", test, "\n")
-- 運(yùn)行l(wèi)oad
local retfunc = load(test, "use test")
-- 輸出結(jié)果函數(shù)
print("\nretfunc function is", retfunc)
-- 輸出影響的變量
print("\nbefore use function ret func, w = "..w)
-- 調(diào)用結(jié)果函數(shù)
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"))
- 運(yùn)行結(jié)果

base_load.png
總結(jié)
- 先說說這個(gè)函數(shù)為什么把我的電腦整崩潰了,原因是一開始不會(huì)用,在網(wǎng)上費(fèi)了好長(zhǎng)時(shí)間找了一個(gè)程序,寫完代碼測(cè)試——死循環(huán)了,一般的死循環(huán)沾滿一個(gè)CPU,這個(gè)程序可倒好,4個(gè)CPU全是100%,導(dǎo)致電腦崩潰了。
- 它出現(xiàn)死循環(huán)的原因就是由于他的結(jié)束條件,它會(huì)不斷的調(diào)用函數(shù)
func,知道它返回空串、nil或者是不返回,可是一般寫好的函數(shù),怎么會(huì)突然不返回,結(jié)果一直返回就死循環(huán)了。 - 再說說返回值中代碼塊使用的變量
w居然得是全局變量,否則編譯不過去,我不知道這么做有什么意義。 - 最后生成函數(shù)的代碼里相當(dāng)于有10句
w = w +1;代碼,由運(yùn)行結(jié)果也證實(shí)了這一點(diǎn)。 - 運(yùn)行到最后我還是不明白這個(gè)函數(shù)究竟應(yīng)該運(yùn)用在什么場(chǎng)景下,請(qǐng)知道原因的大神們得我指點(diǎn)一下,謝謝了。