返回
RUST学习日记 第20课 认识和使用闭包
闲谈
2023-09-18 05:57:23
闭包的定义
闭包是Rust函数的一种特殊表现形式,它允许将函数作为另一个函数的参数或返回值,这为Rust代码带来了更大的灵活性。闭包可以捕获其定义所在作用域的变量,即使这些变量在闭包定义之后才被创建或被释放。
闭包的语法
闭包的语法与函数的语法非常相似,但闭包没有名称,而是使用||符号来表示。例如:
let add = |x, y| x + y;
这个闭包将两个数字x和y相加,并返回结果。
闭包的使用场景
闭包的使用场景非常广泛,例如:
- 作为另一个函数的参数或返回值
- 用作回调函数
- 用作线程或协程的执行函数
- 用作生成器的生成函数
闭包的示例
以下是一些闭包的示例:
- 使用闭包作为函数的参数:
fn apply(f: fn(i32) -> i32, x: i32) -> i32 {
f(x)
}
let add_one = |x| x + 1;
let result = apply(add_one, 10);
println!("{}", result); // 输出: 11
- 使用闭包作为函数的返回值:
fn create_adder(x: i32) -> fn(i32) -> i32 {
move |y| x + y
}
let add_ten = create_adder(10);
let result = add_ten(5);
println!("{}", result); // 输出: 15
- 使用闭包作为回调函数:
fn for_each(f: fn(i32), xs: &[i32]) {
for x in xs {
f(x);
}
}
let xs = vec![1, 2, 3, 4, 5];
for_each(|x| println!("{}", x), &xs);
// 输出:
// 1
// 2
// 3
// 4
// 5
- 使用闭包作为线程或协程的执行函数:
use std::thread;
fn main() {
let thread = thread::spawn(|| {
println!("Hello from a new thread!");
});
thread.join().unwrap();
}
这个例子中,我们使用闭包作为线程的执行函数。
总结
闭包是Rust函数的一种特殊表现形式,它允许将函数作为另一个函数的参数或返回值。闭包可以捕获其定义所在作用域的变量,即使这些变量在闭包定义之后才被创建或被释放。闭包的使用场景非常广泛,例如,作为另一个函数的参数或返回值、用作回调函数、用作线程或协程的执行函数、用作生成器的生成函数等。