闭包的基础概念
闭包是一种可以捕获其环境中变量的匿名函数
闭包的语法相对简洁灵活,同时也具有强大的功能。闭包在Rust中被广泛用于函数式编程、并发编程以及简化代码等方面。
定义闭包的语法类似(但更简单)
-
在
|
内定义参数 -
可选地指定参数/返回类型
-
在
{}
内定义闭包体
你可以将闭包分配给一个变量
- 然后使用该变量,就像它是一个函数名来调用闭包
#[derive(Debug)]
struct User {
name: String,
score: u64,
}
// fn sort_score(users: &mut Vec<User>) {
// users.sort_by_key(sort_helper);
// }
// fn sort_helper(u: &User) -> u64 {
// u.score
// }
fn sort_score_closure(users: &mut Vec<User>) {
users.sort_by_key(|u| u.score);
}
fn main() {
let a = User {
name: "111".to_string(),
score: 90,
};
let b = User {
name: "222".to_string(),
score: 80,
};
let c = User {
name: "333".to_string(),
score: 100,
};
let mut users = vec![a, b, c];
sort_score_closure(&mut users);
println!("{:?}", users);
}
闭包获取参数
由Rust编译器决定用那种方式获取外部参数
-
不可变引用
Fn
-
可变引用
FnMut
-
转移所有权(Move)
FnOnce
fn main() {
// fn不可变引用
let s1 = String::from("111");
let s2 = String::from("222");
let fn_func = |s| {
println!("{s1}");
println!("I am {s}");
println!("{s1}");
};
fn_func("moguw".to_owned());
println!("{s1}, {s2}");
// FnMut可变引用
let mut s1 = String::from("111");
let mut fn_func = |s| {
s1.push_str("
标签:closure,入门,s1,简易,let,Rust,func,println,fn
From: https://www.cnblogs.com/moguw/p/18155747/rust-base-9