Move —— 函数和模块

函数是 Move 程序的基本构建块,模块则是组织代码的容器。本文介绍函数的定义语法、三种可见性级别(内部、公共、包私有),以及语句与表达式的区别和模块的基本结构。

1. 函数(Function)

函数由以下部分构成:

  • fun 关键字
  • 函数名 add
  • 参数 x, y 和参数类型 u32
  • 函数体 x + y
  • 返回值类型 u32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 公共函数(Public Function)
public fun main() {
let x = add(1, 2);
debug::print(&x);
}

// 内部函数(Internal Function)
fun add(x: u32, y: u32): u32 {
x + y
}

// 包私有函数(Package Only), 允许同一包内的不同模块共享功能,同时限制外部访问
public(package) fun add(x: u32, y: u32): u32 {
x + y
}

2. 语句与表达式

2.1 语句(Statements)

语句执行操作,但不返回值。

1
2
3
4
5
6
fun main() {
// ❌ 错误写法
// 因为 let y = 6 是语句,没有返回值
// 这是 Move 和 Rust 的一个特性,如果是 C 或 Ruby,赋值操作会返回被赋的值 6
let x = (let y = 6);
}

2.2 表达式(Expression)

表达式计算并返回值。

1
2
3
4
5
6
7
8
fun main() {
let y = {
let x = 3;
x + 1 // 没有分号,表示表达式
};

debug::print(&y);
}

3. 模块(Module)

模块由一下几个部分组成:

  • module 关键字
  • test 包地址(package address)
  • module_name 模块名称
  • 结构体、函数、常量与导入,都是模块的一部分
1
2
3
// Module label.
module test::module_name; // 与 module 0x0::module_name; 等价
// module body

test 包地址(package address)对应 Move.toml addresses 段。

1
2
[addresses]
test = "0x0"