Reference 将参数引用转发到Rust中的函数

Reference 将参数引用转发到Rust中的函数,reference,rust,Reference,Rust,当我将一个引用参数转发给Rust中另一个同样需要引用参数的函数时,我很难弄清楚发生了什么 基本上,我对一个值何时是引用(需要用*取消引用)以及何时只是一个可以直接使用的值感到困惑。比如说, fn second(s: &String) { println!("Got string '{}'", *s); // Can also use s } fn first(s: &String) { second(s); //

当我将一个引用参数转发给Rust中另一个同样需要引用参数的函数时,我很难弄清楚发生了什么

基本上,我对一个值何时是引用(需要用
*
取消引用)以及何时只是一个可以直接使用的值感到困惑。比如说,

fn second(s: &String) {
    println!("Got string '{}'", *s);  // Can also use s 
}

fn first(s: &String) {
    second(s);                        // Can also use &s
}

fn main() {
    let s = String::from("Hello, World!");
    first(&s);
}

如上所示,将
s
first
传递到
second
并在
second
内部打印
s
的四种组合中的任何一种都有效。我的直觉告诉我,
s
inside
first
是一个引用,因此
&s
将是一个双重引用,而
s
inside
second
是一个需要取消引用的引用,但它实际上似乎并不重要。这是怎么回事?

你实际上问了两个不同的问题;我已链接到相应的副本。TL;博士:
println
自动获取引用,并且
Deref
强制为您将
&String
转换为
&String
。同样相关:感谢您的帮助!