当我将一个引用参数转发给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
并在s
内打印second
的四种组合中的任何一种都有效。我的直觉说s
first
是一个引用,因此&s
将是一个双引用,s
second
内的serializing
是需要的引用被取消引用,但它似乎并不重要。这是怎么回事?