匹配运算符允许将值与一系列模式进行比较,并在找到匹配项时执行代码。 模式可以是文字值,变量名称,通配符和许多其他内容。
下面通过一个简单的例子来理解匹配运算符:
enum computerlanguage
{
c,
cplus,
java,
csharp,
}
fn language(language:computerlanguage)
{
match language
{
computerlanguage::c=> println!("c language"),
computerlanguage::cplus=> println!("c++ language"),
computerlanguage::java=> println!("java language"),
computerlanguage::csharp=> println!("c# language"),
}
}
fn main()
{
language(computerlanguage::c);
language(computerlanguage::cplus);
language(computerlanguage::java);
language(computerlanguage::csharp);
}
执行上面示例代码,得到以下结果 -
c language
c++ language
java language
c# language
在上面的示例中,computerlanguage
是一种自定义数据类型,由四种变体组成:c
,cplus
,java
,csharp
。 匹配运算符将语言的值与匹配运算符块中给出的表达式匹配。
当想要在某些情况下获得t
的内部值时,使用选项<t>
。
选项 <t>
包含两个变体:
通过下面一个例子来理解:
fn main()
{
even_number(2);
even_number(3);
}
fn even_number(n:i32)
{
let num=n;
match checked_even(n)
{
none=>println!("none"),
some(n)=>
{
if n==0
{
println!("{} is a even number",num);
}
else
{
println!("{} is a odd number",num);
}},
}
}
fn checked_even(number:i32)->option<i32>
{
some(number%2)
}
执行上面示例代码,得到以下结果 -
2 is a even number
3 is a odd number
在rust中,匹配是详尽的,即,应该尽可能地使代码有效。假设忘记编写none
情况,那么rust编译器将显示“模式 none 未覆盖”的错误。
通过下面一个例子来理解:
fn main()
{
some(5);
}
fn value(n:option<i32>)
{
match n
{
some(n)=>println!("{}is a number",n),
}
}
编译输出结果如下 -