Lua base load()

加載.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)一下,謝謝了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容