首页 > 解决方案 > 如果没有明确提供类型,借用检查器会抱怨循环内的关闭

问题描述

我有这段代码,借用检查器显示错误:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=55d050b6f25410ce0e17ef9e844b048d

fn f1(v: &str) {
}

fn main() {
    let c = |v| f1(v);
    for _ in 0..1 {
        let s = String::new();
        c(&s);
    }
}
   |
10 |         c(&s);
   |         - ^^ borrowed value does not live long enough
   |         |
   |         borrow later used here
11 |     }
   |     - `s` dropped here while still borrowed

但是如果我在闭包中添加显式类型,代码就会编译let c = |v: &str| f1(v);

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=54ca20dff5bdf1831ec705481e4936bb

有人可以解释为什么它在第二种情况下而不是第一种情况下有效,因为我理解 rust 在第一个示例中正确推断出相同的类型(因为如果我在循环外运行闭包,它会起作用)?

标签: rustborrow-checker

解决方案


推荐阅读