模組 (Module)
模組是 Move 中程式碼組織的基本單位。模組用於分組和隔離程式碼,預設情況下,模組的所有成員對該模組而言都是私有的。在本節中,您將學習如何定義模組、宣告其成員,以及如何從其他模組存取它。
模組宣告
使用 module 關鍵字後接套件地址、模組名稱、分號及模組主體來宣告模組。模組名稱應使用 蛇形命名法 (snake_case) — 即全小寫字母,單字之間以底線分隔。在一個套件中,模組名稱必須是唯一的。
通常,sources/ 資料夾中的一個檔案包含一個模組。檔案名稱應與模組名稱相匹配 — 例如,donut_shop 模組應儲存在 donut_shop.move 檔案中。您可以在 編碼規範 節點中閱讀更多相關資訊。
如果您需要在一個檔案中宣告多個模組,則必須使用 模組區塊 (Module Block) 語法。
// 模組標籤。
module book::my_module;
// 模組主體
結構、函式、常數和匯入都是模組的一部份:
地址與具名地址 (Address and Named Address)
模組地址可以透過以下兩種方式指定:位址 常數 (literal)(不需要 @ 前綴)或在 套件清單 (Package Manifest) 中指定的 具名地址。在下面的範例中,兩者是相同的,因為 Move.toml 的 [addresses] 部分中有一條 book = "0x0" 的紀錄。
module 0x0::address_literal { /* ... */ }
module book::named_address { /* ... */ }
Move.toml 中的地址部分:
# Move.toml
[addresses]
book = "0x0"
模組成員
模組成員在模組主體內宣告。為了說明這一點,讓我們定義一個包含結構、函式和常數的簡單模組:
module book::my_module_with_members;
// 匯入
use book::my_module;
// 一個常數
const CONST: u8 = 0;
// 一個結構
public struct Struct {}
// 方法別名
public use fun function as Struct.struct_fun;
// 函式
fun function(_: &Struct) { /* function body */ }
模組區塊 (Module Block)
2024 版本之前的 Move 要求模組的主體必須是一個 模組區塊 — 即模組的內容需要被大括號 {} 包圍。使用區塊語法(而非 標籤 (label) 語法)的主要原因是如果您需要在一個檔案中定義多個模組。然而,不建議在實務中使用模組區塊。
module book::my_block_module_with_members {
// 匯入
use book::my_module;
// 一個常數
const CONST: u8 = 0;
// 一個結構
public struct Struct {}
// 方法別名
public use fun function as Struct.struct_fun;
// 函式
fun function(_: &Struct) { /* function body */ }
}
// 模組區塊允許在同一檔案中定義多個模組,
// 但這不是推薦的做法
module book::another_module_in_the_file {
// ...
}
延伸閱讀
- Move 參考手冊中的 模組 (Modules)。