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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Lua的require使用

發(fā)布時(shí)間:2024/2/28 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua的require使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.require的作用

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

    (1)main.luarequire "test"require "showSome"(2)test.luafunction CallFunc()//這里能調(diào)用show(),證明了_G中有show這個(gè)元素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中,當(dāng)lua啟動(dòng)后便以環(huán)境變量LUA_PATH的值來(lái)初始化這個(gè)變量,如果沒(méi)有找到,則使用2中的的默認(rèn)路徑。如果lua還是無(wú)法找到與模塊命符合的lua文件,那么它會(huì)開(kāi)始找c程序庫(kù),路徑儲(chǔ)存在package.cpath中,這個(gè)變量通過(guò)環(huán)境變量LUA_CPATH來(lái)初始化。?
    2.require的默認(rèn)路徑在:luaconf.h中,我們打開(kāi)該文件搜索: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靜態(tài)lib庫(kù),然后我們的程序使用新的靜態(tài)lib,這樣才能起效?
    2.可以看到默認(rèn)的路徑的格式為: ?.lua , 所以我們r(jià)equire “xxx”,而不是require “xxx.lua”

    三.require的返回值

    require “xxx” 某個(gè)模塊后

    1.如果該模塊自身有返回值,且模塊加載成功,那么require 的返回值就是該模塊的返回值?
    2.如果模塊沒(méi)有返回值,如果require加載模塊成功,就返回ture?
    3.require 內(nèi)部將返回值儲(chǔ)存在: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的實(shí)現(xiàn)代碼

    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

    總結(jié)

    以上是生活随笔為你收集整理的Lua的require使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。