日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua的require使用

發布時間:2024/2/28 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua的require使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.require的作用

  • 加載指定的模塊,相當與#include作用類似,加載了該模塊,那么就可已使用模塊中的全局函數和全局數據(如表等等)?
    注:實際上require “xxx”后,會將xxx中的全局函數和數據放到表_G中,所以也就能訪問了。
  • 2.例子

    (1)main.luarequire "test"require "showSome"(2)test.luafunction CallFunc()//這里能調用show(),證明了_G中有show這個元素show()end(3)showSome.luafunction show()print("it is showsome")end(4)testLua.cppint _tmain(int argc, _TCHAR* argv[]) {lua_State *L = luaL_newstate();luaL_openlibs(L);luaL_dofile(L,"Lua//main.lua");lua_getglobal(L,"CallFunc");lua_pcall(L,0,0,0);return 0; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    二.require的搜索模塊的路徑

    1.搜索lua文件的路徑存放在變量package.path中,當lua啟動后便以環境變量LUA_PATH的值來初始化這個變量,如果沒有找到,則使用2中的的默認路徑。如果lua還是無法找到與模塊命符合的lua文件,那么它會開始找c程序庫,路徑儲存在package.cpath中,這個變量通過環境變量LUA_CPATH來初始化。?
    2.require的默認路徑在:luaconf.h中,我們打開該文件搜索:LUA_PATH_DEFAULT ,便可以看到?
    #deine LUA_PATH_DEFAULT \?
    LUA_LDIR”?.lua;” LUA_LDIR”?\init.lua;” \?
    LUA_CDIR”?.lua;” LUA_CDIR”?\init.lua;” \?
    LUA_SHRDIR”?.lua;” LUA_SHRDIR”?\init.lua;” \?
    “.\?.lua;” “.\?\init.lua;” \?
    LUA_CDIR”..\testLua\Lua\?.lua;” –這句是我自己加的

    #deine LUA_CPATH_DEFAULT\?
    LUA_CDIR”?.dll;” \?
    LUA_CDIR”..\lib\lua\” LUA_VDIR “\?.dll;” \?
    LUA_CDIR”loadall.dll;” “.\?.dll”

    注:?
    1.修改了luaconf.h中的路徑后,我們需要重新生成新的lua靜態lib庫,然后我們的程序使用新的靜態lib,這樣才能起效?
    2.可以看到默認的路徑的格式為: ?.lua , 所以我們require “xxx”,而不是require “xxx.lua”

    三.require的返回值

    require “xxx” 某個模塊后

    1.如果該模塊自身有返回值,且模塊加載成功,那么require 的返回值就是該模塊的返回值?
    2.如果模塊沒有返回值,如果require加載模塊成功,就返回ture?
    3.require 內部將返回值儲存在:package.loaded表中。?
    (即:package.loaded[xxx]中)

    4.例子

    (1)main.luax = require "test"function Call()x.show() end(2)test.lualocal tb = {} function tb.show()print("it is ok") endreturn tb(3)testLua.cppint _tmain(int argc, _TCHAR* argv[]) {lua_State *L = luaL_newstate();luaL_openlibs(L);luaL_dofile(L,"Lua//main.lua");lua_getglobal(L,"Call");lua_pcall(L,0,0,0);return 0; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    四. require的實現代碼

    function require(name)if not package.loaded[name] thenlocal loader = findloader(name)if loader == nil thenerror("unable to load module" .. name)endpackage.loaded[name] = truelocal res = loader(name)if res ~= nil thenpackage.loaded[name] = resendendreturn package.loaded[name] end
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    總結

    以上是生活随笔為你收集整理的Lua的require使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。