• <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區別

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

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

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

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久亚洲AV成人无码国产| 亚洲国产另类久久久精品小说| 久久青青草原精品影院| 精品亚洲综合久久中文字幕| 国产精品免费看久久久香蕉| 午夜精品久久久久久久无码| 国产Av激情久久无码天堂| 欧美激情精品久久久久| 久久久久女教师免费一区| 性高湖久久久久久久久| 国内精品久久久久久不卡影院 | 中文精品99久久国产| 国产精品无码久久综合| 久久久久久国产精品无码下载| 99国产欧美久久久精品蜜芽| 亚洲国产日韩欧美综合久久| 女人香蕉久久**毛片精品| 国内精品综合久久久40p| 久久播电影网| 99久久精品无码一区二区毛片| 久久综合狠狠综合久久| 久久99热这里只频精品6| 久久这里有精品视频| 久久精品一区二区| 色综合久久久久综合体桃花网| 久久精品无码一区二区app| 996久久国产精品线观看| 无码超乳爆乳中文字幕久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久久久人妻无码中文字幕爆| 久久久久亚洲精品无码网址| 一级做a爱片久久毛片| 91久久九九无码成人网站| 久久精品国产91久久综合麻豆自制| 一级做a爰片久久毛片人呢| 久久99国内精品自在现线| 久久无码专区国产精品发布| 亚洲国产精品成人久久蜜臀| 亚洲?V乱码久久精品蜜桃| 久久精品国产精品青草app| 国产精品久久99|