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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

openresty开发系列21--lua的模块

發(fā)布時(shí)間:2025/3/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openresty开发系列21--lua的模块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

openresty開發(fā)系列21--lua的模塊

從lua5.1開始,Lua 加入了標(biāo)準(zhǔn)的模塊管理機(jī)制,Lua 的模塊是由變量、函數(shù)等已知元素組成的 table,

因此創(chuàng)建一個(gè)模塊很簡(jiǎn)單,就是創(chuàng)建一個(gè) table,然后把需要導(dǎo)出的常量、函數(shù)放入其中,最后返回這個(gè) table 就行。

一)模塊定義

模塊的文件名 和 模塊定義引用名稱要一致

-- 文件名為 model.lua
-- 定義一個(gè)名為 model 的模塊
model = {}
?
-- 定義一個(gè)常量
model.constant = "這是一個(gè)常量"
?
-- 定義一個(gè)函數(shù)
function model.func1()
??? print("這是一個(gè)公有函數(shù)")
end
?
local function func2()
??? print("這是一個(gè)私有函數(shù)!")
end
?
function model.func3()
??? func2()
end
?
return model

二)require 函數(shù)
Lua提供了一個(gè)名為require的函數(shù)用來加載模塊。要加載一個(gè)模塊,只需要簡(jiǎn)單地調(diào)用就可以了。例如:

require("<模塊名>")? 或者? require "<模塊名>"

執(zhí)行 require 后會(huì)返回一個(gè)由模塊常量或函數(shù)組成的 table,并且還會(huì)定義一個(gè)包含該 table 的全局變量。

-- test_model.lua 文件
-- model 模塊為上文提到 model.lua

require("model")
?
print(model.constant)
?
model.func3()


另一種寫法,給加載的模塊定義一個(gè)別名變量,方便調(diào)用

local m = require("model")
?
print(m.constant)
?
m.func3()

以上代碼執(zhí)行結(jié)果為:

這是一個(gè)常量
這是一個(gè)私有函數(shù)!


如:模塊定義的model,為local修飾為局部變量,那只能采用local m = require("model") 引用

三)require 加載機(jī)制

我們使用require命令時(shí),系統(tǒng)需要知道引入哪個(gè)路徑下的model.lua文件。

require 用于搜索 Lua 文件的路徑是存放在全局變量 package.path 中,

當(dāng) Lua 啟動(dòng)后,會(huì)以環(huán)境變量 LUA_PATH 的值來初始這個(gè)環(huán)境變量。
如果沒有找到該環(huán)境變量,則使用一個(gè)編譯時(shí)定義的默認(rèn)路徑來初始化。

lua文件的路徑存放在全局變量package.path中,默認(rèn)的package.path的值為 print(package.path)
./?.lua;/usr/local/openresty/luajit/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/openresty/luajit/share/lua/5.1/?.lua;/usr/local/openresty/luajit/share/lua/5.1/?/init.lua

我們運(yùn)行require("model");相當(dāng)于把model替換上面的?號(hào),lua就會(huì)在那些目錄下面尋找model.lua如果找不到就報(bào)錯(cuò)。
所以我們就知道為什么會(huì)報(bào)錯(cuò)了。

那我們?nèi)绾谓鉀Q,我這里介紹常用的解決方案,編輯環(huán)境變量LUA_PATH
在當(dāng)前用戶根目錄下打開 .profile 文件(沒有則創(chuàng)建,打開 .bashrc 文件也可以),
例如把 "~/lua/" 路徑加入 LUA_PATH 環(huán)境變量里:

#LUA_PATH
export LUA_PATH="/usr/local/lua/?.lua;;"

文件路徑以 ";" 號(hào)分隔,最后的 2 個(gè) ";;" 表示新加的路徑后面加上原來的默認(rèn)路徑。

接著,更新環(huán)境變量參數(shù),使之立即生效。

source ~/.profile

這時(shí)假設(shè) package.path 的值是:

/usr/local/lua/?.lua;./?.lua;/usr/local/openresty/luajit/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/openresty/luajit/share/lua/5.1/?.lua;/usr/local/openresty/luajit/share/lua/5.1/?/init.lua

那么調(diào)用 require("model") 時(shí)就會(huì)嘗試打開以下文件目錄去搜索目標(biāo)。

轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/11433805.html

總結(jié)

以上是生活随笔為你收集整理的openresty开发系列21--lua的模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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