代码之家  ›  专栏  ›  技术社区  ›  Moebius

展开时无法移出位于共享引用后面的值

  •  22
  • Moebius  · 技术社区  · 9 年前

    这是我试图执行的代码:

    fn my_fn(arg1: &Option<Box<i32>>) -> i32 {
        if arg1.is_none() {
            return 0;
        }
        let integer = arg1.unwrap();
        *integer
    }
    
    fn main() {
        let integer = 42;
        my_fn(&Some(Box::new(integer)));
    }
    

    ( on the Rust playground )

    在Rust的早期版本中,我遇到以下错误:

    error[E0507]: cannot move out of borrowed content
     --> src/main.rs:5:19
      |
    5 |     let integer = arg1.unwrap();
      |                   ^^^^ cannot move out of borrowed content
    

    在更现代的版本中:

    error[E0507]: cannot move out of `*arg1` which is behind a shared reference
     --> src/main.rs:5:19
      |
    5 |     let integer = arg1.unwrap();
      |                   ^^^^
      |                   |
      |                   move occurs because `*arg1` has type `std::option::Option<std::boxed::Box<i32>>`, which does not implement the `Copy` trait
      |                   help: consider borrowing the `Option`'s content: `arg1.as_ref()`
    

    我看到已经有很多关于借贷检查器问题的文档,但在阅读之后,我仍然无法找出问题所在。

    为什么这是一个错误,我该如何解决?

    2 回复  |  直到 4 年前