为什么会生成“释放临时值”错误:
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
答案 0 :(得分:1)
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
} );
不起作用。