• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            colorful

            zc qq:1337220912

             

            lua require dofile loadfile區(qū)別

            http://blog.163.com/hbu_lijian/blog/static/126129153201422902256778/

            1.dofile與loadfile
            dofile 當(dāng)作Lua運(yùn)行代碼的chunk的一種原始的操作。dofile實(shí)際上是一個(gè)輔助的函數(shù)。真正完成功能的函數(shù)是loadfile;與dofile不同的是 loadfile編譯代碼成中間碼并且返回編譯后的chunk作為一個(gè)函數(shù),而不執(zhí)行代碼;另外loadfile不會(huì)拋出錯(cuò)誤信息而是返回錯(cuò)誤代。我們可 以這樣定義dofile:
            function dofile (filename)
            local f = assert(loadfile(filename))
            return f()
            end
            如 果loadfile失敗assert會(huì)拋出錯(cuò)誤。loadfile更加靈活。在發(fā)生錯(cuò)誤的情況下,loadfile返回nil和錯(cuò)誤信息,這樣我們就可以 自定義錯(cuò)誤處理。另外,如果我們運(yùn)行一個(gè)文件多次的話,loadfile只需要編譯一次,但可多次運(yùn)行。dofile卻每次都要編譯。
            2.loadstring與loadfile
            loadstring與loadfile相似,只不過(guò)它不是從文件里讀入chunk,而是從一個(gè)串中讀入。
            f = loadstring("i = i + 1")
            loadstring 函數(shù)功能強(qiáng)大,但使用時(shí)需多加小心。確認(rèn)沒(méi)有其它簡(jiǎn)單的解決問(wèn)題的方法再使用。loadfile和loadstring都不會(huì)拋出錯(cuò)誤,如果發(fā)生錯(cuò)誤他們 將返回nil加上錯(cuò)誤信息。另外,loadfile和loadstring都不會(huì)有邊界效應(yīng)產(chǎn)生,他們僅僅編譯chunk成為自己內(nèi)部實(shí)現(xiàn)的一個(gè)匿名函 數(shù)。通常對(duì)他們的誤解是他們定義了函數(shù)。Lua中的函數(shù)定義是發(fā)生在運(yùn)行時(shí)的賦值而不是發(fā)生在編譯時(shí)。
            loadstring通常用 于運(yùn)行程序外部的代碼,比如運(yùn)行用戶自定義的代碼。注意:loadstring期望一個(gè)chunk,即語(yǔ)句。如果想要加載表達(dá)式,需要在表達(dá)式前加 return,那樣將返回表達(dá)式的值。loadstring返回的函數(shù)和普通函數(shù)一樣,可以多次被調(diào)用。
            print "enter your expression:"
            local l = io.read()
            local func = assert(loadstring("return " .. l))
            print("the value of your expression is " .. func())
            3.require與dofile
            。粗略的說(shuō)require和dofile完成同樣的功能但有兩點(diǎn)不同:
            1. require會(huì)搜索目錄加載文件
            2. require會(huì)判斷是否文件已經(jīng)加載避免重復(fù)加載同一文件。由于上述特征,require在Lua中是加載庫(kù)的更好的函數(shù)。
            require 使用的路徑和普通我們看到的路徑還有些區(qū)別,我們一般見(jiàn)到的路徑都是一個(gè)目錄列表。require的路徑是一個(gè)模式列表,每一個(gè)模式指明一種由虛文件名 (require的參數(shù))轉(zhuǎn)成實(shí)文件名的方法。更明確地說(shuō),每一個(gè)模式是一個(gè)包含可選的問(wèn)號(hào)的文件名。匹配的時(shí)候Lua會(huì)首先將問(wèn)號(hào)用虛文件名替換,然后 看是否有這樣的文件存在。如果不存在繼續(xù)用同樣的方法用第二個(gè)模式匹配。例如,路徑如下:?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua 
            調(diào)用過(guò)程如下:
            lili
            lili.lua
            c:\windows\lili
            /usr/local/lua/lili/lili.lua
            還會(huì)有so/dll文件。
            為了確定路徑,Lua首先檢查全局變量LUA_PATH是否為一個(gè)字符串,如果是則認(rèn)為這個(gè)串就是路徑;否則require檢查環(huán)境變量LUA_PATH的值,如果兩個(gè)都失敗require使用固定的路徑(典型的"?;?.lua")
            一個(gè)路徑中的模式也可以不包含問(wèn)號(hào)而只是一個(gè)固定的路徑,比如:?;?.lua;/usr/local/default.lua。這種情況下,require沒(méi)有匹配的時(shí)候就會(huì)使用這個(gè)固定的文件(當(dāng)然這個(gè)固定的路徑必須放在模式列表的最后才有意義)

            posted on 2014-08-22 09:24 多彩人生 閱讀(1297) 評(píng)論(0)  編輯 收藏 引用 所屬分類: lua

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国内精品久久久久影院日本| 99久久精品国产高清一区二区| 亚洲成人精品久久| 久久成人精品| 亚洲精品国产第一综合99久久| 香蕉aa三级久久毛片| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 精品国产99久久久久久麻豆| 亚洲AV无码久久精品成人| 国产精品久久久久天天影视| 少妇被又大又粗又爽毛片久久黑人 | 久久久久久国产精品无码下载 | 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久久久这里只有精品| 99久久国产精品免费一区二区 | 久久亚洲日韩精品一区二区三区| 51久久夜色精品国产| 亚洲欧美日韩久久精品第一区| 91亚洲国产成人久久精品| 久久久久青草线蕉综合超碰| 久久精品国产清自在天天线| 97久久久精品综合88久久| 2021国内久久精品| 国产99久久久国产精免费| 久久精品中文騷妇女内射| 久久无码人妻精品一区二区三区| 91精品国产乱码久久久久久| 久久亚洲精品成人无码网站| 久久本道综合久久伊人| 91精品婷婷国产综合久久| 69久久夜色精品国产69| 亚洲精品乱码久久久久久中文字幕 | 久久久久青草线蕉综合超碰| 久久人人爽人人精品视频| 日本精品久久久中文字幕| 国产综合久久久久久鬼色| 人妻精品久久久久中文字幕69| 午夜福利91久久福利| 青春久久| 久久精品国产AV一区二区三区| 亚洲精品乱码久久久久久蜜桃 |