【笔记】Rust的闭包

前言

Rust的闭包学习笔记

定义闭包

  • Rust中的闭包又称作lambda、lambda表达式、内联函数,是一类能够捕获周围作用域的匿名函数
  • 闭包可以在没有标注类型的情况下运行
  • 闭包没有函数名,但是可以赋值给一个变量,通过变量调用闭包,闭包的返回值也可以赋值给变量
  • 闭包无需声明返回值,但是可以有返回值,并且可以使用最后一条语句的结果作为返回值
  • 闭包可以移动(move),可以借用(borrow)
  • 闭包可以通过T&T&mut T获取值

定义无参数的闭包

1
2
3
let 闭包变量名 = || {
...
}
  • 闭包内可以使用闭包外的变量
1
2
3
4
5
6
7
8
闭包外的变量名 = 0;

let 闭包变量名 = || {

println!(闭包外的变量名);

...
}

定义有参数的闭包

1
2
3
let 闭包变量名 = |参数列表| {
...
}

调用闭包

  • 调用闭包和调用函数的方式基本上相同,但是调用闭包时,输入类型和返回值类型两者都可以自动推导,但输入变量名必须指明

调用无参数的闭包

1
let res = 闭包变量名();

调用有参数的闭包

1
let res = 闭包变量名(参数列表);

函数参数为闭包

1
2
3
4
5
6
7
8
9
fn 函数名<T>(参数名:T) {
参数名();
}

fn main() {
let x = 1;
let y = 2;
函数名(|x, y| x + y);
}

函数返回值为闭包

1
2
3
4
5
6
7
8
fn 函数名() -> impl Fn(闭包参数类型)->闭包返回值类型 {
return |x, y| x + y;
}

fn main() {
let 闭包变量名 = 函数名();
let res = 闭包变量名(1, 2);
}

完成

参考文献

哔哩哔哩——面向加薪学习