代码之家  ›  专栏  ›  技术社区  ›  Valentin Lorentz

“借来的数据不能存储在其关闭之外”是什么意思?

  •  4
  • Valentin Lorentz  · 技术社区  · 6 年前

    fn main() {
        let mut fields = Vec::new();
        let pusher = &mut |a: &str| {
            fields.push(a);
        };
    }
    

    error: borrowed data cannot be stored outside of its closure
     --> src/main.rs:4:21
      |
    3 |     let pusher = &mut |a: &str| {
      |         ------        --------- ...because it cannot outlive this closure
      |         |
      |         borrowed data cannot be stored into here...
    4 |         fields.push(a);
      |                     ^ cannot be stored outside of its closure
    

    这个错误是什么意思?我如何修复我的代码?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Shepmaster Lukas Kalbertodt    6 年前

    它的确切含义是:您所借用的数据仅在关闭期间有效。试图将其存储在关闭之外会使代码暴露在内存中不安全。

    Vec .

    导致了更多类型推断的发生。在这种情况下,可以将类型添加到 fields

    let mut fields: Vec<&str> = Vec::new();
    let pusher = |a| fields.push(a);