Rust中模式的定义是什么,模式匹配是什么?

The*_*ade 1 functional-programming pattern-matching rust

我是一名非常熟悉C和C++等语言的程序员,但我对于功能性很强的东西经验很少.我正在尝试学习Rust,并且想知道Rust定义了一个模式,以及与matchRust中的表达式匹配的模式.

sep*_*p2k 5

Rust中存在许多类型的模式.最值得注意的是:

  • 文字,如42.这些匹配给定的值.因此,如果你这样做match f() {42 => ...},如果f()返回42,将输入42个案例.
  • 标识符,例如x.这匹配任何内容并分配匹配的值x.所以在下面的代码中:

    match f() {
      42 => println!("Correct!"),
      x => println!("{} is the wrong answer", x)
    }
    
    Run Code Online (Sandbox Code Playgroud)

    "正确!" 如果f()返回42 将被打印,否则输入的号码将在其后打印"是错误的答案".

  • 通配符模式_.像标识符一样,这​​匹配任何东西,但与标识符不同,没有分配任何内容.如果你不需要匹配的值,请使用它(假设你不想在上面的例子中打印输入的数字,那么你可以写_ => println!("Wrong")

  • 对于X(arg1, ..., argN)枚举的任何变体,X(pattern1, ..., patternN)是有效模式,对于任何Y没有参数的变体,Y都是有效模式.该模式Y与变体匹配Y.图案X(pattern1, ..., patternN)的变体的实例相匹配X,如果它的参数匹配模式pattern1通过patternN分别.考虑这个例子:

    enum Foo {
      X(i32, i32),
      Y
    }
    
    fn g() -> Foo { ... }
    
    fn foo() {
      match g() {
        X(a,b) -> a+b
        Y -> 0
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这里检查foo()将返回X的值的总和g()返回X或者返回0 g()返回Y.