- Lua 教程
- Lua - 首頁
- Lua 基礎
- Lua - 概述
- Lua - 環境
- Lua - 基本語法
- Lua - 註釋
- Lua - 列印 Hello World
- Lua - 變數
- Lua - 資料型別
- Lua - 運算子
- Lua - 迴圈
- Lua - 決策
- Lua - 函式
- Lua - 日期和時間
- Lua 陣列
- Lua - 陣列
- Lua - 多維陣列
- Lua - 陣列長度
- Lua - 遍歷陣列
- Lua 迭代器
- Lua - 迭代器
- Lua 列表
- Lua - 在列表中搜索
- Lua 模組
- Lua - 模組
- Lua - 名稱空間
- Lua 元表
- Lua - 元表
- Lua 協程
- Lua - 協程
- Lua 檔案處理
- Lua - 檔案 I/O
- Lua 庫
- Lua - 標準庫
- Lua - 數學庫
- Lua - 作業系統功能
- Lua 有用資源
- Lua - 快速指南
- Lua - 有用資源
- Lua - 討論
Lua - 模組
什麼是模組?
模組就像一個庫,可以使用require載入,並且具有包含表格的單個全域性名稱。此模組可以包含許多函式和變數。所有這些函式和變數都被封裝到表格中,該表格充當名稱空間。此外,行為良好的模組具有在 require 時返回此表格的必要規定。
Lua 模組的特性
在模組中使用表格以多種方式幫助我們,並使我們能夠以與操作任何其他 Lua 表格相同的方式操作模組。由於能夠操作模組,它提供了其他語言需要特殊機制的其他功能。由於 Lua 中模組的這種自由機制,使用者可以透過多種方式呼叫 Lua 中的函式。下面顯示了其中一些。
-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")
-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")
-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")
在上面的示例程式碼中,您可以看到 Lua 中的程式設計是多麼靈活,無需任何額外的特殊程式碼。
require 函式
Lua 提供了一個名為require的高階函式來載入所有必要的模組。它儘可能簡單,以避免在模組上提供過多的資訊來載入它。require 函式只是將模組視為定義某些值的程式碼塊,實際上是包含函式的函式或表格。
示例
讓我們考慮一個簡單的示例,其中一個函式具有數學函式。讓我們將此模組稱為 mymath,檔名是 mymath.lua。檔案內容如下:
mymath.lua
local mymath = {}
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
return mymath
現在,為了在另一個檔案中(例如 moduletutorial.lua)訪問此 Lua 模組,您需要使用以下程式碼段。
moduletutorial.lua
mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
輸出
為了執行此程式碼,我們需要將這兩個 Lua 檔案放在同一個目錄中,或者,您可以將模組檔案放在包路徑中,並且它需要額外的設定。當我們執行上述程式時,我們將獲得以下輸出。
30 10 200 1.5
需要記住的事項
將模組和執行的檔案都放在同一個目錄中。
模組名稱及其檔名應相同。
最佳實踐是為 require 函式返回模組,因此即使您可以在其他地方找到其他型別的實現,也最好如上所示實現模組。
實現模組的舊方法
現在讓我以舊的方式重寫同一個示例,該示例使用 package.seeall 型別的實現。這在 Lua 版本 5.1 和 5.0 中使用。mymath 模組如下所示。
mymath.lua
module("mymath", package.seeall)
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
在 moduletutorial.lua 中使用模組如下所示。
moduletutorial.lua
require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
輸出
當我們執行上述程式碼時,我們將獲得相同的輸出。但是建議不要使用舊版本的程式碼,並且假設它安全性較低。許多使用 Lua 進行程式設計的 SDK(如 Corona SDK)已棄用此用法。