共享引用(&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); }
|
输出:
下面代码在把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); }
|