临时值被释放不一致

时间:2019-11-30 20:03:56

标签: rust

为什么会生成“释放临时值”错误:

    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

1 个答案:

答案 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
} );

不起作用。