使用共享引用說明Rust所有權概念

banq發表於2022-10-07

共享引用(&T)是複製Copy特性(見這裡,值複製)。
下面是一個常用型別的例子,字串slice片&str。
下面我們可以在第3行和第4行將name傳遞給do_something。注意,我們正在複製引用。

fn main() {
    let name: &'static str = "Rust";
    do_something(name);
    do_something(name);
}

fn do_something(name: &str) {
    println!("Hello, {:?}!", name);
}

輸出:

Hello, Rust!
Hello, Rust!


下面程式碼在把name傳給do_something之前呼叫.clone()是多餘的。

fn main() {
    let name: &'static str = "Rust";
    do_something(name.clone());
    do_something(name.clone());
}

fn do_something(name: &str) {
    println!("Hello, {:?}!", name);
}



根據Clippy的建議,<&str>::clone(&name)這個習慣語會克隆引用。該程式可以編譯,但我不確定這是否是習慣用法。

fn main() {
    let name: &'static str = "Rust";
    do_something(<&str>::clone(&name));
    do_something(<&str>::clone(&name));
}

fn do_something(name: &str) {
    println!("Hello, {:?}!", name);
}




 

相關文章