为什么这会产生“释放临时值”错误:
let mut new_string = String::from("test");
new_string.push_str(
if true { &format!("{}","ay") } else { "ay" }
);
有效时:
let mut new_string = String::from("test");
new_string.push_str(
&format!("{}","ay")
);
游乐场Link
最佳答案
format!
返回一个String
(不带&
),因此为您提供返回值的所有权。您可以说当前块拥有它。然后将其放在当前块的末尾。
在
let mut new_string = String::from("test");
new_string.push_str(
if true { &format!("{}","ay") } else { "ay" }
);
这是
{ &format!("{}","ay") }
。在}
可以使用它之前,将其丢弃在push_str
上。在
let mut new_string = String::from("test");
new_string.push_str(
&format!("{}","ay")
);
它生命周期足够长。
new_string.push_str( {&format!("{}","ay")} );
之所以有效,是因为花括号已被优化。new_string.push_str( {
let t = &format!("{}","ay");
t
} );
不起作用。
关于rust - 临时值被释放不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119779/