Rust 请找出封口注释/签名 问题:
如何找到闭包的签名?具体来说,我如何判断闭包是否引用了我的局部变量 背景: 我认为Rust 请找出封口注释/签名 问题:,rust,closures,Rust,Closures,如何找到闭包的签名?具体来说,我如何判断闭包是否引用了我的局部变量 背景: 我认为pool.install中使用的闭包应该对我的局部变量book进行不可变引用,但编译器并没有抱怨。因此,我试图找出pool.install中使用的闭包签名,认为这些信息可以帮助我了解发生了什么 let pool=rayon::ThreadPoolBuilder::new().build().unwrap(); 环路{ let book=获取书籍。选择下一步。等待; 而mut_tasks.is_empty(){ 选择
pool.install
中使用的闭包应该对我的局部变量book
进行不可变引用,但编译器并没有抱怨。因此,我试图找出pool.install
中使用的闭包签名,认为这些信息可以帮助我了解发生了什么
let pool=rayon::ThreadPoolBuilder::new().build().unwrap();
环路{
let book=获取书籍。选择下一步。等待;
而mut_tasks.is_empty(){
选择{
任务=rx\u语法\u请求。选择\u next\u some()=>{
匹配task.req{
Req::M{..}=>mut_tasks.push(ready(task)),
请求::R{..}=>{
//问:我该如何计算闭包的签名?
pool.install(| | run_ref_task(&book,task));
}
};
},
}
}
拿书。推(准备(书));
让mut querys=FuturesUnordered::new();
环路{
选择{
书本=查询。选择“下一步”\u some()=>{
拿书。推(准备(书));
如果mut_tasks.is_empty()&&querys.is_empty(){break;}
},
book=获取\u book。选择\u next\u some()=>{
如果让一些(任务)=多个任务。下一步()等待{
push(run_mut_task(book,task));
}否则{
拿书。推(准备(书));
if querys.is_empty(){break;}
}
}
}
}
}
闭包的签名由ThreadPool::install的函数签名决定:
pub fn install<OP, R>(&self, op: OP) -> R
where
OP: FnOnce() -> R + Send,
R: Send { ... }
pub-fn-install(&self,op:op)->R
哪里
OP:FnOnce()->R+Send,
R:发送{…}
因此,闭包的签名是()->R
,其中R
是run\u ref\u task(&book,task)
的输出
我假设您实际上对闭包的签名不感兴趣,而是对闭包捕获的内容感兴趣。在这种情况下,book
通过引用捕获,task
通过值捕获或复制(如果其类型实现了Copy
)
有关闭包捕获模式和FnOnce
/FnMut
/Fn
的更多信息,请访问: