【发布时间】:2021-04-27 02:54:21
【问题描述】:
问题:
如何找到闭包的签名?具体来说,我如何判断一个闭包是否引用了我的局部变量?
背景:
我认为pool.install 中使用的闭包应该对我的局部变量book 进行不可变引用,但编译器并没有抱怨。所以我试图弄清楚pool.install 中使用的闭包签名,认为这些信息可以帮助我理解正在发生的事情。
let pool = rayon::ThreadPoolBuilder::new().build().unwrap();
loop {
let book = get_book.select_next_some().await;
while mut_tasks.is_empty() {
select! {
task = rx_grammar_req.select_next_some() => {
match task.req {
Req::M {..} => mut_tasks.push(ready(task)),
Req::R {..} => {
// Q: how do I figure out the closure's signature?
pool.install(|| run_ref_task(&book, task));
}
};
},
}
}
get_book.push(ready(book));
let mut queries = FuturesUnordered::new();
loop {
select! {
book = queries.select_next_some() => {
get_book.push(ready(book));
if mut_tasks.is_empty() && queries.is_empty() { break; }
},
book = get_book.select_next_some() => {
if let Some(task) = mut_tasks.next().await {
queries.push(run_mut_task(book, task));
} else {
get_book.push(ready(book));
if queries.is_empty() { break; }
}
}
}
}
}
【问题讨论】: