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

时间:2016-08-19 23:42:24

标签: functional-programming pattern-matching rust

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

1 个答案:

答案 0 :(得分:5)

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

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

    match f() {
      42 => println!("Correct!"),
      x => println!("{} is the wrong answer", x)
    }
    

    "!更正"将在f()返回42时打印,否则输入的号码将打印为"是错误的答案"在它之后。

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

  • 对于枚举的任何变体X(arg1, ..., argN)X(pattern1, ..., patternN)是有效模式,对于没有参数的任何变体YY是有效模式。模式Y与变体Y匹配。如果模式X(pattern1, ..., patternN)的参数分别匹配模式Xpattern1,则模式patternN匹配变体enum Foo { X(i32, i32), Y } fn g() -> Foo { ... } fn foo() { match g() { X(a,b) -> a+b Y -> 0 } } 的实例。考虑这个例子:

    g()

    如果X返回g(),则foo()将返回X值的总和,如果Y返回<div align='center'>Hello world</div> ,则返回0。