模块是 Move 中的代码组织基本单元。模块用于组织和隔离代码,模块的所有成员默认情况下对模块私有。在本节中,您将学习如何定义模块,声明其成员以及如何从其他模块访问它们。

模块声明

使用 module 关键字后跟包地址、模块名称和模块体在花括号 {} 内来声明模块。模块名称应采用 snake_case 形式,即所有小写字母,单词之间用下划线分隔。模块名称在包内必须是唯一的。

通常,sources/ 文件夹中的单个文件包含一个模块。文件名应与模块名称匹配 - 例如,donut_shop 模块应存储在 donut_shop.move 文件中。您可以在Coding Conventions部分了解更多有关编码约定的信息。

module book::my_module {
    // module body
}

模块的成员包括结构体、函数、常量和导入:

地址 / 命名地址

模块地址可以指定为地址_字面量_(不需要 @ 前缀)或在包清单中指定的命名地址。在下面的示例中,两者是相同的,因为在 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 */ }
}

进一步阅读

  • 在 Move 参考文档中阅读有关模块的更多信息。