一个可运行的例子,注释说明各种现象。
use std::collections::HashMap;
#[derive(Debug)]
struct Man{
name: String,
gender: String,
}
#[derive(Debug)]
struct Man2{
name: Option<String>,
gender: Option<String>,
}
fn test_hashmap_1(){
let x = Man{
name: String::from("tim"),
gender: String::from("male"),
};
//代码可以正常运行,没有owner的move问题
let mut ahash = HashMap::new();
ahash.insert(1i32, &x);
println!("x = {:?}", x);
//下面代码不能运行,println!("x = {:?}", x);
// | ^ value borrowed here after move
// let mut ahash = HashMap::new();
// //这里的x的owner已经move到了ahash,因此不能在println!使用
// ahash.insert(1i32, x);
// println!("x = {:?}", x);
}
fn test_hashmap_2(){
let x = Man{
name: String::from("tim"),
gender: String::from("male"),
};
//代码可以正常运行,没有