The*_*ade 1 functional-programming pattern-matching rust
我是一名非常熟悉C和C++等语言的程序员,但我对于功能性很强的东西经验很少.我正在尝试学习Rust,并且想知道Rust定义了一个模式,以及与matchRust中的表达式匹配的模式.
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.