跳到主要内容

模块

模块是 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 */ }
}