《Move 学习》模块与注释

大家好!今天我们来聊聊 Move 语言中的两个基础但非常重要的概念:模块(Module)注释(Comments)。无论你是刚入门的小白,还是已经有一些开发经验,这篇文章都会用最接地气的方式,带你轻松掌握这些概念。准备好了吗?Let's dive in!

📦 模块(Module):代码组织的基本单位

在 Move 语言中,模块 是代码组织的基本单位。模块用于将代码分组和隔离,模块中的所有成员默认是私有的。通过模块,你可以更好地组织代码结构,并控制代码的访问权限。

模块声明

模块通过 module 关键字声明,后面跟着包地址、模块名、分号和模块体。模块名通常使用 snake_case 命名法(全小写,单词间用下划线分隔),并且在包内必须是唯一的。

通常,sources/ 文件夹中的每个文件包含一个模块,文件名应与模块名一致。例如,donut_shop 模块应存储在 donut_shop.move 文件中。

move 复制代码
module book::donut_shop {
    // 模块内容
}

如果需要在同一个文件中声明多个模块,可以使用 模块块(Module Block)

地址与命名地址

模块地址可以是一个地址字面量(不需要 @ 前缀),也可以是在 Move.toml 中指定的命名地址。例如:

move 复制代码
module book::donut_shop {
    // 模块内容
}

Move.toml 中的地址部分:

toml 复制代码
[addresses]
book = "0x0"

模块成员

模块成员(如结构体、函数、常量等)在模块体内声明。以下是一个简单的模块示例,包含一个结构体、一个函数和一个常量:

move 复制代码
module book::donut_shop {
    struct Donut has drop {
        flavor: vector<u8>,
        price: u64,
    }

    public fun create_donut(flavor: vector<u8>, price: u64): Donut {
        Donut { flavor, price }
    }

    const MAX_PRICE: u64 = 100;
}

模块块

在 Move 2024 之前的版本中,模块内容需要用花括号 {} 包围。如果你需要在同一个文件中定义多个模块,可以使用模块块。

move 复制代码
module book::donut_shop {
    // 模块内容
}

module book::coffee_shop {
    // 另一个模块
}

📝 注释(Comments):代码的"笔记"

注释 是用来为代码添加说明或笔记的。它们不会被编译器处理,也不会出现在 Move 字节码中。注释可以帮助你解释代码的功能,添加开发笔记,或者临时移除部分代码。Move 支持三种注释:单行注释、块注释和文档注释。

单行注释

使用双斜杠 // 来注释掉一行的剩余部分。// 之后的所有内容都会被编译器忽略。

move 复制代码
let x = 10; // 这是一个单行注释

块注释

块注释用于注释掉一段代码。它们以 /* 开始,以 */ 结束。/**/ 之间的所有内容都会被编译器忽略。块注释可以用于注释单行、多行,甚至一行中的部分内容。

move 复制代码
let x = 10; /* 这是一个块注释 */
let y = /* 注释掉一部分 */ 20;

文档注释

文档注释 是一种特殊的注释,用于为代码生成文档。它们以三个斜杠 /// 开头,并放置在要注释的项之前。文档注释通常用于模块、结构体、函数和常量的说明。

move 复制代码
/// 这是一个文档注释
/// 用于描述模块、结构体或函数的功能
module book::donut_shop {
    /// 创建一个新的 Donut 对象
    public fun create_donut(flavor: vector<u8>, price: u64): Donut {
        Donut { flavor, price }
    }
}

文档注释可以通过工具生成 API 文档,帮助其他开发者更好地理解和使用你的代码

🚀 总结

通过本文,我们学习了 Move 语言中的 模块注释 的基本用法。模块是代码组织的基本单位,帮助你更好地管理和隔离代码;而注释则是代码的"笔记",帮助你和其他开发者理解代码的功能和设计。

如果你对 Move 语言感兴趣,记得关注我,后续我会带来更多关于 Move 的教程和实战案例!🚀

相关推荐
0x派大星6 小时前
区块链中的递归长度前缀(RLP)序列化详解
区块链·以太坊
礼小七11 小时前
区块链相关方法-波士顿矩阵 (BCG Matrix)
区块链
yoona102012 小时前
Rust编程语言入门教程(八)所有权 Stack vs Heap
开发语言·后端·rust·区块链·学习方法
OpenBuild.xyz16 小时前
我是如何从 0 到 1 找到 Web3 工作的?
人工智能·web3·去中心化·区块链·智能合约
Sui_Network16 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
区块链蓝海1 天前
Secured Finance携手Axelar及Squid提升流动性,迎接USDFC主网
区块链
yunteng5211 天前
solidity之Foundry安装配置(一)
web3·区块链·solidity·foundry
qiquandongkh2 天前
2025年股指期货和股指期权合约交割的通知!
大数据·金融·区块链
yoona10203 天前
Rust编程语言入门教程 (七)函数与控制流
开发语言·rust·区块链·学习方法
MetaverseMan4 天前
从sumsub获取用户图片
区块链