模块
模块是 Move 中代码组织的基本单元。模块用于分组和隔离代码,默认情况下模块的所有成员都是模块私有的。在本节中,您将学习如何定义模块、如何声明其成员以及如何从其他模块访问它们。
模块声明
模块使用 module 关键字声明,后跟包地址,模块名称,花括号和模块主体。模块名称应采用蛇形命名法(snake_case)来方式,即所有字母小写,单词之间用下划线(_)分隔。模块名称在包中必须是唯一的。
通常,sources 文件夹中的单个文件包含单个模块。文件名应与模块名称匹配 - 例如,donut_shop 模块应存储在 donut_shop.move 文件中。你可以在编码约定部分阅读有关编码约定的更多信息。
module book::my_module {
// module body
}
模块的成员包括结构体、函数、常量和导入:
- TODO
- 结构体
- 函数
- 常量
- 导入
- 结构体方法
地址与命名地址
模块地址可以指定为地址字面量(不需要 @ 前缀)或在包清单中指定的命名地址。在下面的示例中,两者是相同的,因为在 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 {
// import
use book::my_module;
// a constant
const CONST: u8 = 0;
// a struct
public struct Struct {}
// method alias
public use fun function as Struct.struct_fun;
// function
fun function(_: &Struct) { /* function body */ }
}