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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Lua的require机制

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

在Lua中,有模塊這個定義,加載一個模塊需要使用require函數,require是一個全局函數。

require有兩個寫法require("modname")和require "modname"

1.首先require函數會查找package.loaded表,檢測modname是否加載過,如果加載過,則不再加載,如果沒加載過,則繼續

2.require加載模塊的按照package.searchers序列的指引來查找加載器,使用另一個全局函數loader()實現,PS:package.searchers序列可以需改

3.默認的package.searchers序列如下:

  • 查詢package.preload[modname],如果有這個值,完工。通常返回為空
  • 查詢package.path路徑,如果有這個模塊,完工
  • 查詢package.cpath,如果有這個模塊,完工

如果在加載或運行模塊時有錯誤, 或是無法為模塊找到加載器,?require?都會拋出錯誤。

package.config?

一個描述有一些為包管理準備的編譯期配置信息的串。 這個字符串由一系列行構成:

  • 第一行是目錄分割串。 對于 Windows 默認是 '\' ,對于其它系統是 '/' 。
  • 第二行是用于路徑中的分割符。默認值是 ';' 。
  • 第三行是用于標記模板替換點的字符串。 默認是 '?' 。
  • 第四行是在 Windows 中將被替換成執行程序所在目錄的路徑的字符串。 默認是 '!' 。
  • 第五行是一個記號,該記號之后的所有文本將在構建?luaopen_?函數名時被忽略掉。 默認是 '-'。

package.cpath

這個路徑被?require?在 C 加載器中做搜索時用到。

Lua 用和初始化 Lua 路徑?package.path?相同的方式初始化 C 路徑?package.cpath?。 它會使用環境變量?LUA_CPATH_5_3?或 環境變量?LUA_CPATH?初始化。 要么就采用?luaconf.h?中定義的默認路徑。

package.loaded

用于?require?控制哪些模塊已經被加載的表。 當你請求一個?modname?模塊,且?package.loaded[modname]?不為假時,?require?簡單返回儲存在內的值。

這個變量僅僅是對真正那張表的引用; 改變這個值并不會改變?require?使用的表。

package.loadlib (libname, funcname)

讓宿主程序動態鏈接 C 庫?libname?。

當?funcname?為 "*", 它僅僅連接該庫,讓庫中的符號都導出給其它動態鏈接庫使用。 否則,它查找庫中的函數?funcname?,以 C 函數的形式返回這個函數。 因此,funcname?必須遵循原型lua_CFunction?。

這是一個低階函數。 它完全繞過了包模塊系統。 和?require?不同, 它不會做任何路徑查詢,也不會自動加擴展名。?libname?必須是一個 C 庫需要的完整的文件名,如果有必要,需要提供路徑和擴展名。funcname?必須是 C 庫需要的準確名字 (這取決于使用的 C 編譯器和鏈接器)。

這個函數在標準 C 中不支持。 因此,它只在部分平臺有效 ( Windows ,Linux ,Mac OS X, Solaris, BSD, 加上支持?dlfcn?標準的 Unix 系統)。

package.path

這個路徑被?require?在 Lua 加載器中做搜索時用到。

在啟動時,Lua 用環境變量?LUA_PATH_5_3?或環境變量LUA_PATH?來初始化這個變量。 或采用?luaconf.h?中的默認路徑。 環境變量中出現的所有 ";;" 都會被替換成默認路徑。

package.preload

保存有一些特殊模塊的加載器

這個變量僅僅是對真正那張表的引用; 改變這個值并不會改變?require?使用的表。

?

轉載于:https://www.cnblogs.com/ideaofnextcy/p/5984721.html

總結

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

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