# 函数
前言
关键字fn
# 1.普通函数
# 1.参数
Rust 中定义函数如果需要具备参数必须声明参数名称和类型
# 2.函数体
用 {} 包括的块里编写一个较为复杂的表达式
# 3.返回值
关键字return
函数声明返回值类型的方式:在参数声明之后用 -> 来声明函数返回值的类型
fn add(a: i32, b: i32) -> i32 {
return a + b;
}
1
2
3
2
3
# 2.闭包
Rust 中的闭包是一种匿名函数,它们可以捕获并存储其环境中的变量
- 闭包格式:
|参数...| { 表达式 }
let add = |a, b| a + b;
println!("{}", add(2, 3)); // 输出: 5
1
2
2
# 3.1 Fn闭包
不捕获上下⽂变量,或者捕获上下⽂变量的只读引⽤
# 3.1.1 参数
- 1.传入参数
参数可以有类型注解,也可以省略,Rust 编译器会根据上下文推断它们。
let add_one = |x: i32| x + 1;
1
- 2.上下文中的变量
let x = 10;
let closure = || println!("{}", x); // 捕获只读引用
closure();
1
2
3
2
3
# 3.1.2 返回值
闭包可以有零个或多个参数,并且可以返回一个值
let calculate = |a, b, c| a * b + c;
1
# 3.1.3 调用
闭包可以像函数一样被调用
let result = calculate(1, 2, 3);
1
# 3.2 FnMut闭包
捕获上下⽂变量的可写引⽤
# 3.2.1 参数
- 1.上下文中的变量
let mut x = 10;
let mut closure = || {
x += 1;// 捕获可写引用
println!("{}", x);
};
closure();
println!("{}", x);
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3.2.2 返回值
闭包可以有零个或多个参数,并且可以返回一个值
let calculate = |a, b, c| a * b + c;
1
# 3.2.3 调用
闭包可以像函数一样被调用
let result = calculate(1, 2, 3);
1
# 3.3 FnOnce闭包
上下⽂变量拥有的值的所有权将会被转移到闭包中,这也是为什么 它只能被调⽤⼀次(Once),因为只有⼀次机会转移所有权,再次调⽤的时候就会出错了
# 3.3.1 参数
- 1.上下文中的变量所有权被转移
let s = String::from("Hello world!");
let closure = move || {
let tp = (s, 1);
println!("{:?}", tp);
};
closure();
1
2
3
4
5
6
2
3
4
5
6
# 3.3.2 返回值
闭包可以有零个或多个参数,并且可以返回一个值
let calculate = |a, b, c| a * b + c;
1
# 3.3.3 调用
闭包可以像函数一样被调用
let result = calculate(1, 2, 3);
1