.. 和有什么不一样。和 _ 在 Rust 中?

What is the difference between .. and _ in Rust?

提问人:Afsa 提问时间:6/15/2023 最后编辑:Bill Tür stands with UkraineAfsa 更新时间:6/15/2023 访问量:1890

问:

在这种情况下,两个句点和下划线有什么区别:

 let a = Some("a");
    match a {
        Some(_) => println!("we are in match _"),

        _ => panic!(),
    }
    match a {
        Some(..) => println!("we are in match .."),
        _ => panic!(),
    }

两者都可以编译和运行,但为什么更喜欢一个而不是另一个呢?

Rust 模式 匹配

评论


答:

32赞 Chayim Friedman 6/15/2023 #1

在这种情况下,没有区别。

通常,忽略一个元素(字段、数组元素、元组字段等),同时忽略剩下的所有内容(除显式指定的字段以外的所有字段等)。但是,由于仅包含一个字段,因此具有相同的效果。_..Some

以下是它们不同的示例:

struct Foo(u32, u32);

fn foo(v: Foo) {
    match v {
        Foo(..) => {}
        Foo(_, _) => {}
    }
}

评论

9赞 Mario Carneiro 6/15/2023
更喜欢这种形式(甚至 ,它甚至也适用于元组结构/枚举变体)的一个原因是因为它使匹配对参数数量的变化或它是否在声明中使用括号或元组样式具有鲁棒性。(或者,如果您希望代码中断并要求对变体的任何更改进行审查,则可以选择该表单。当你有一大堆具有各种参数的变体时,能够以相同的方式编写所有分支是很方便的。..Foo { .. }_