在Rust中,为什么在需要if的情况下不进行匹配解引用?

3
作为熟悉指针和解引用的C程序员,我正在学习Rust教程,但遇到了一些不理解的问题。
fn main() {
    let vector = vec![10, 20, 30, 40];
    for entry in &vector {
        if *entry == 30 { // I have to use a star (dereference) here...
            println!("thirty");
        } else {
            println!("{}", entry);
        }
        match entry { // ...but why do I not need a star here?
            30 => println!("thirty"),
            _ => println!("{}", entry), // or here?
        }
    }
}

1个回答

1
在第一个情况下,你的if语句正在与一个值进行比较,因此你必须取出该值,也就是解除引用,以便正确地比较值。此外,对向量的循环暗示了一个.into_iter()调用,在给定上下文中,这会给你一个对entry中当前值的&T引用。
在第二个匹配中,Rust编译器正在应用自动解除引用,因此编译器已经知道你不想与指针匹配,而是要与值匹配。正如其他人指出的那样,match语句包含一些人性化的设计,使代码更易读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接