以下是琐碎的复制(截至2月2日至23日,每晚Rust ):
fn main() {
let closure = |_v| {};
// this one works fine
// let closure = |_v: &_| {};
{
let x = 1;
closure(&x);
}
{
let y = 1;
closure(&y);
}
}
错误是:
6 | let x = 1;
| - binding `x` declared here
7 | closure(&x);
| ^^ borrowed value does not live long enough
8 | }
| - `x` dropped here while still borrowed
...
11 | closure(&y);
| ------- borrow later used here
这没有意义,因为closure
没有捕获变量x
,而只是一个通过引用传递的参数.
为闭包参数_v: &_
提供显式引用解决了这个问题,但它不应该被自动推断吗?
是借阅判断器的某些缺陷/限制吗?或者我遗漏了一些更基本的东西?