use std::collections::BTreeMap;
#[derive(Debug)]
struct TestStruct {
name: String,
num: f64,
}
fn main() {
let test_struct = TestStruct {name: "Test".to_string(), num: 0.42 };
println!("{:?}", test_struct);
}
fn get_fields_as_map(test_struct: &TestStruct) -> BTreeMap<&str, &str> {
let mut field_map: BTreeMap<&str, &str> = BTreeMap::new();
field_map.insert("name", &test_struct.name);
field_map.insert("num", &test_struct.num.to_string());
field_map
}
这会产生以下错误:
error[E0515]: cannot return value referencing temporary value
--> src/main.rs:19:5
|
18 | field_map.insert("num", &test_struct.num.to_string());
| --------------------------- temporary value created here
19 | field_map
| ^^^^^^^^^ returns a value referencing data owned by the current function
我认为这是有道理的。 to_string()
函数正在分配一个字符串,其生命周期与函数相同。 我还没有想出如何分配字符串,使其具有与 BTreeMap
相同的生命周期。 我尝试了几种不同的方法,但没有成功,感觉自己缺少了一些东西。 我不完全理解所有权。
&...
插入映射中,它只持有一个引用(指向一个在函数返回时被丢弃的字符串,从而导致映射中出现悬挂指针)。 - undefined