【Rust】闭包-捕获变量
环境
- Rust 1.56.1
- VSCode 1.61.2
概念
参考:https://doc.rust-lang.org/stable/rust-by-example/fn/closures/capture.html
示例
捕获引用
fn main() {
let color = String::from("green");
// 闭包借用 color 变量
let print = || println!("`color`: {}", color);
print();
// 可以再次不可变借用,因为闭包只捕获了不可用引用。
let _reborrow = &color;
print();
// 闭包使用完成后,变量可以进行移动。
let _color_moved = color;
}
捕获可变引用
fn main() {
let mut count = 0;
// 闭包需要使用 mut,因为里面有 mut count。
let mut inc = || {
count += 1;
println!("`count`: {}", count);
};
inc();
inc();
// 因为上面的可变借用完了,所以这里可以再次使用可变借用
let _count_reborrowed = &mut count;
}
捕获值
fn main() {
let haystack = vec![1, 2, 3];
// haystack 移动到了闭包里
let contains = move |needle| haystack.contains(needle);
println!("{}", contains(&1));
println!("{}", contains(&4));
// 上面已经发生了移动,所以这里不能再次使用了
// println!("There're {} elements in vec", haystack.len());
}
只能调用一次的移动
fn main() {
use std::mem;
let movable = Box::new(3);
let consume = || {
println!("`movable`: {:?}", movable);
mem::drop(movable);
};
consume();
// 编译错误,只能调用一次
// consume();
}
总结
了解了 Rust 中的闭包捕获变量的几种方式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2019-12-01 spring-boot war包部署(二)