Rust 模式匹配中的 ref 和 & 有什么区别

What is the difference between ref and & in Rust pattern matching

提问人:Michael Pacheco 提问时间:6/8/2022 更新时间:6/8/2022 访问量:591

问:

做这个练习 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() 等情况下使用,其中匹配人体工程学,它们将具有完全相同的代码,这在我看来令人困惑,而使用一个是公正的,另一个使用。refrefrefrefref mut