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