提问人:Michael Pacheco 提问时间:6/8/2022 更新时间:6/8/2022 访问量:591
Rust 模式匹配中的 ref 和 & 有什么区别
What is the difference between ref and & in Rust pattern matching
问:
做这个练习 https://github.com/rust-lang/rustlings/blob/main/exercises/option/option3.rs 我发现了这个关键词,我感到非常困惑,我应该什么时候使用或进行模式匹配。在此示例中,每个匹配项都输出相同的消息,但我无法分辨它们的区别:ref
&
ref
struct Point { x: i32, y: i32}
fn main() {
let y: Option<Point> = Some(Point { x: 100, y: 200 });
match &y {
Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
_ => println!("no match"),
}
match y {
Some(ref p) => println!("Co-ordinates are {},{} ", p.x, p.y),
_ => println!("no match"),
}
match &y {
Some(ref p) => println!("Co-ordinates are {},{} ", p.x, p.y),
_ => println!("no match"),
}
y;
}
答:
4赞
Chayim Friedman
6/8/2022
#1
ref
年纪大了。与参考的匹配给出参考的事实是匹配人体工程学功能的结果。
它们并不完全相同,但通常您可以选择。我和许多其他人更喜欢这种形式,尽管我看到一些人不喜欢匹配人体工程学,而总是喜欢明确的。&
ref
在某些情况下,您无法获取引用,然后被迫使用 .我也更喜欢在 Option::as_ref() 和 Option::as_mut()
等情况下使用,其中匹配人体工程学,它们将具有完全相同的代码,这在我看来令人困惑,而使用一个是公正的,另一个使用。ref
ref
ref
ref
ref mut
评论