Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust HashMap键的寿命不够长_Rust_Borrow Checker - Fatal编程技术网

Rust HashMap键的寿命不够长

Rust HashMap键的寿命不够长,rust,borrow-checker,Rust,Borrow Checker,我正在尝试使用哈希映射,但有一条错误消息我不明白。下面是代码(): 这里发生了什么事?是否有解决办法?此问题已通过解决,从2018年起不应成为一个问题。下面的答案与使用旧版本锈菌的人相关 map比s寿命长,因此在map生命的某个时刻(就在销毁之前),s将无效。这可以通过改变它们的构造顺序和破坏顺序来解决: let s = Struct; let mut map: HashMap<String, &Trait> = HashMap::new(); map.insert("ke

我正在尝试使用
哈希映射
,但有一条错误消息我不明白。下面是代码():


这里发生了什么事?是否有解决办法?

此问题已通过解决,从2018年起不应成为一个问题。下面的答案与使用旧版本锈菌的人相关


map
s
寿命长,因此在
map
生命的某个时刻(就在销毁之前),
s
将无效。这可以通过改变它们的构造顺序和破坏顺序来解决:

let s = Struct;
let mut map: HashMap<String, &Trait> = HashMap::new();
map.insert("key".to_string(), &s);

谢谢,行得通。但是你能解释一下为什么
map
s
活得长吗?我认为变量是在作用域的末尾被销毁的,所以有没有具体的销毁顺序?“有没有具体的销毁顺序?”→ 与构造顺序相反,因为如果你有
让x=1;设y=T(&x)
,y的析构函数可能需要访问x。哦,我明白了。我认为这是因为这些变量是在堆栈中分配的。
let s = Struct;
let mut map: HashMap<String, &Trait> = HashMap::new();
map.insert("key".to_string(), &s);
let mut map: HashMap<String, Box<Trait>> = HashMap::new();
let s = Struct;
map.insert("key".to_string(), Box::new(s));