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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Lua require 相对路径

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua require 相对路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lua require 加載方式與我們現在熟知的路徑系統不太一樣,想要知道lua require 方法的工作原理也很簡單 隨便寫一個錯誤的require 代碼即可: 1 require("lala");

?

這樣運行會得到一個報錯: 1 1>F:\Git\luatest\metaTest.lua:(56): module 'lala' not found: 2 no field package.preload['lala'] 3 no file '.\lala.lua' 4 no file 'D:\Program Files (x86)\LuaStudio\lua\lala.lua' 5 no file 'D:\Program Files (x86)\LuaStudio\lua\lala\init.lua' 6 no file 'D:\Program Files (x86)\LuaStudio\lala.lua' 7 no file 'D:\Program Files (x86)\LuaStudio\lala\init.lua' 8 no file 'C:\Program Files\Lua\5.1\lua\lala.luac' 9 no file 'F:\Git\luatest\lala.lua' 10 no file '.\lala.dll' 11 no file 'D:\Program Files (x86)\LuaStudio\lala.dll' 12 no file 'D:\Program Files (x86)\LuaStudio\loadall.dll' 13 Stack Traceback: 14 [C]: in function 'require' 15 F:\Git\luatest\metaTest.lua:56: in main chunk

?

這里可以很清晰的看見lua require方法搜索一個模塊或者文件的流程會依次搜索文件名為lala.lua的文件或者dll 那么這些帶有路徑的lala.lua文件怎么來的的?很簡單lua的模塊路徑是存在一個全局table package的path和cpath字段里的: 打印一下
1 print(package.path);

?

運行得到 1 ;.\?.lua; 2 D:\Program Files (x86)\LuaStudio\lua\?.lua; 3 D:\Program Files (x86)\LuaStudio\lua\?\init.lua 4 ;D:\Program Files (x86)\LuaStudio\?.lua; 5 D:\Program Files (x86)\LuaStudio\?\init.lua; 6 C:\Program Files\Lua\5.1\lua\?.luac; 7 F:\Git\luatest\?.lua

?

1 print(package.cpath); .\?.dll; D:\Program Files (x86)\LuaStudio\?.dll; D:\Program Files (x86)\LuaStudio\loadall.dll

?

是不是很眼熟,是的當require的時候lua解釋器會按照path 和cpath里存儲的路徑替換“?”去查詢是否存在該文件,有則加載腳本或者模塊亦或是C庫。 了解了加載機制我們就可以很方便的去加載任何我們當前腳本依賴的外部模塊: 'require("requiretest.loader");' 但是又一個問題,當我們想要加載當前腳本的上級目錄或者其他目錄的怎么辦,這時候就需要自己去修改或者是添加相對路徑,由于require的查詢路徑都是 存儲在package.path中的這樣我們就可以自行添加: 1 package.path = package.path ..';..\\?.lua';

?

測試下:在目錄requiretest目錄下新建loader.lua,在根目錄下新建requiretest2目錄并新建loader2.lua: loader.lua: 1 require("requiretest2.loader2");

?

loader2.lua: 1 print("requiretest2.loader2");

?

運行: 1 requiretest2.loader2

在項目實際運用時可以根據需求加入相對目錄。

?

?

些許淺薄認識 如有不妥之處望請斧正!!!!!

轉載于:https://www.cnblogs.com/smallboat/p/5552407.html

總結

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

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