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

标签 functional-programming pattern-matching rust

<分区>

我是一名程序员,对 C 和 C++ 等语言非常熟悉,但对于函数式的东西,我的经验却很少。我正在尝试学习 Rust,并想知道 Rust 将模式定义为什么,以及 Rust 中与 match 表达式匹配的模式是什么。

最佳答案

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)是一个有效的模式并且对于任何变体 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
      }
    }
    

    如果 g(),foo() 将返回 X 值的总和返回了 X或者它会返回 0 如果 g()返回 Y .

关于functional-programming - Rust 中模式的定义是什么,什么是模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049063/

相关文章:

python-3.x - 如何使用 rxpy/rxjs 延迟事件发射?

scala - 用函数代码替换 if-else

Lua模式匹配,匹配前获取字符

rust - 如何为引用自身但不改变自身的迭代器的关联类型指定生命周期?

scala - 第一种使用 Scala 的方法

scala - 需要帮助以函数式编程风格重构此 Scala 方法

enums - 我如何只匹配枚举的部分而不是所有变体?

iterator - 有条件地从 flat_map 返回空迭代器

rust - 如何将 `impl Clone for` 设为不允许移动的类型?

javascript - Ramda - 部分应用的功能取决于完整的应用