05.22 OpenResty實戰-Lua入門-Lua模塊

OpenResty實戰-Lua入門-Lua模塊

從 Lua 5.1 語言添加了對模塊和包的支持。一個 Lua 模塊的數據結構是用一個 Lua 值(通常是一個 Lua 表或者 Lua 函數) 。一個 Lua 模塊代碼就是一個會返回這個 Lua 值的代碼塊。

可以使用內建函數 require() 來加載和緩存模塊。簡單的說,一個代碼模塊就是一個程序庫,可以通過 require 來加載。模塊加載後的結果通過是一個 Lua table,這個表就像是一個命名空間,其內容就是模塊中導出的所有東西,比如函數和變量。 require 函數會返回Lua 模塊加載後的結果,即用於表示該 Lua 模塊的 Lua 值。

require 函數

Lua 提供了一個名為 require 的函數用來加載模塊。要加載一個模塊,只需要簡單地調用require "file" 就可以了,file 指模塊所在的文件名。這個調用會返回一個由模塊函數組成的table,並且還會定義一個包含該 table 的全局變量。

在 Lua 中創建一個模塊最簡單的方法是:創建一個 table,並將所有需要導出的函數放入其中,最後返回這個 table 就可以了。相當於將導出的函數作為 table 的一個字段,在 Lua 中函數是第一類值,提供了天然的優勢。

把下面的代碼保存在文件 my.lua 中

local foo={}

local function getname()

return "Lucy"

end

function foo.greeting()

print("hello " .. getname())

end

return foo

把下面代碼保存在文件 main.lua 中,然後執行 main.lua,調用上述模塊。

local fp = require("my")

fp.greeting() -->output: hello Lucy

注:對於需要導出給外部使用的公共模塊,處於安全考慮,是要避免全局變量的出現。 我們可以使用 lj-releng 或 luacheck 工具完成全局變量的檢測。 具體參考後續的關於代碼靜態分析(測試)的文章。

至此,Lua模塊就介紹完了,下一篇將介紹Lua的String庫。

後續計劃內容:

Lua入門+高階

Nginx

OpenResty

LuaRestyRedisLibrary

LuaCjsonLibrary

PostgresNginxModule

LuaNginxModule

LuaRestyDNSLibrary

LuaRestyLock

stream_lua_module

balancer_by_lua

OpenResty 與 SSL

測試

Web服務

火焰圖

OpenResty周邊

零碎知識點


分享到:


相關文章: