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

无法移出作为参数传递可选成员的借用内容[重复]

  •  1
  • GTF  · 技术社区  · 6 年前

    我有一个 find 在基本内存存储解决方案上定义的函数。我正在尝试通过创建一个 struct 打电话 SearchOpts :

    trait HasRecords {
        fn find(&self, opts: &SearchOpts) -> ();
    }
    
    pub struct SearchOpts {
        sensorId: Option<String>,
    }
    
    struct MemDb {
        id: u32,
    }
    
    impl HasRecords for MemDb {
        fn find(&self, opts: &SearchOpts) -> () {
            println!("Hello {}", opts.sensorId.unwrap());
        }
    }
    
    fn main() {
        let _x = MemDb { id: 42 };
    }
    

    playground

    error[E0507]: cannot move out of borrowed content
      --> src/main.rs:15:30
       |
    15 |         println!("Hello {}", opts.sensorId.unwrap());
       |                              ^^^^ cannot move out of borrowed content
    

    我不知道这是否是实现这类功能的最佳方法,但我也不知道在这种情况下如何取悦借用检查器(这是我想首先学习的内容)。

    1 回复  |  直到 6 年前
        1
  •  1
  •   durka42    6 年前

    SearchOpts

    definition of Option::unwrap

    pub fn unwrap(self) -> T
    

    Option Option::as_ref

    pub fn as_ref(&self) -> Option<&T>
    

    &Option<T> Option<&T> &T

    if opts.sensorId.is_some() && &d.sensorId != opts.sensorId.as_ref().unwrap() {
         return false;
    }
    

    if opts.sensorId.as_ref().map_or(false, |id| id != &d.sensorId) {
        return false;
    }