繁体   English   中英

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;
}

ref较旧。 与参考匹配提供参考的事实是匹配人体工程学功能的结果。

它们并不完全相同,但通常您可以选择。 我和许多其他人更喜欢&形式,尽管我看到有人不喜欢匹配人体工程学并且总是更喜欢显式ref

在某些情况下,您无法获取参考,然后您被迫使用ref 我也更喜欢在Option::as_ref()Option::as_mut()之类的情况下使用ref ,在符合人体工程学的情况下,它们将具有完全相同的代码,这在我看来令人困惑,而使用ref一个只是ref和其他使用ref mut

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM