我是一名非常熟悉C和C ++等语言的程序员,但我对那些功能性很强的东西经验很少。我正在尝试学习Rust,并想知道Rust定义了一个模式,以及与match
表达式匹配的模式在Rust中。
答案 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)
是有效模式,对于没有参数的任何变体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()
如果X
返回g()
,则foo()将返回X值的总和,如果Y
返回<div align='center'>Hello world</div>
,则返回0。