use std::collections::HashMap;
#[derive(Debug)]
struct A {
fields: Option<HashMap<i32, String>>,
}
impl A {
fn get(&self, key: i32) -> Option<&String> {
if let Some(ref fields) = self.fields {
if let Some(value) = fields.get(&key) {
//return Some(value.clone());
return Some(value);
}
}
return None;
}
}
fn main() {
let mut a = A { fields: Some(HashMap::new()), };
if let Some(ref mut fields) = a.fields {
fields.insert(5, "hello".to_string());
}
// aの借用が発生する
let value = a.get(5);
// したがってaの所有権を移すことは出来ない
dbg!(a);
// aの借用はここまで続く
dbg!(value);
}
/*
error[E0505]: cannot move out of `a` because it is borrowed
|
24 | let value = a.get(5);
| - borrow of `a` occurs here
25 | dbg!(a);
| ^^^^^^^^ move out of `a` occurs here
26 | dbg!(value);
| ----- borrow later used here
|
*/