[英]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;
}
ref
较旧。 与参考匹配提供参考的事实是匹配人体工程学功能的结果。
它们并不完全相同,但通常您可以选择。 我和许多其他人更喜欢&
形式,尽管我看到有人不喜欢匹配人体工程学并且总是更喜欢显式ref
。
在某些情况下,您无法获取参考,然后您被迫使用ref
。 我也更喜欢在Option::as_ref()
和Option::as_mut()
之类的情况下使用ref
,在符合人体工程学的情况下,它们将具有完全相同的代码,这在我看来令人困惑,而使用ref
一个只是ref
和其他使用ref mut
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.