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
的更多信息,请访问: