Rust:在占位符内部调用变量和在占位符外部调用变量(作为单独的参数)有什么区别?

toe95027  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(108)

(初学者的问题)在观察了一些编码示例(来自各种来源)和Cargo Clippy的语法建议之后,我仍然想知道下面的代码块是否只是相同结果的两个替代品,或者实际上做了一些我必须意识到的不同的事情。

fn main() {
    let string_1 = "Hello!";
    let string_2 = "See you!";

    println!("{} {}", string_1, string_2);
}

或者...

fn main() {
    let string_1 = "Hello!";
    let string_2 = "See you!";

    println!("{string_1} {string_2}");
}

如果我使用第一种语法,Cargo Clippy建议我使用第二种语法,但是,如果我编写println!("{} {}", &string_1, &string_2);,Clippy就不再抱怨了,所以我猜这两个代码块之间的区别与Rust独特的"所有权"概念有关。
所以,我错过了什么吗?

lc8prwob

lc8prwob1#

它们是相同的(但第二个更新,在Rust 1.58.0中稳定,并且更推荐用于新代码)。
Clippy在引用时不再建议使用第二种形式的原因是它是无效的:只有标识符(裸变量名)可以与内联捕获一起使用。

相关问题