有些语言有switch表达式/语句,有些语言有match语句。这在语义上是否存在差异,或者只是基本相同的事物的不同语法。
例如:
铁锈有match:
match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter(state) => 25,
}
Run Code Online (Sandbox Code Playgroud)
(取自https://doc.rust-lang.org/book/ch06-02-match.html#the-match-control-flow-operator。)
Java有开关:
switch coin {
case Penny:
return 1;
break;
case Nickel:
return 5;
break;
case Dime:
return 10;
break;
case Quarter:
return 25;
break;
}
Run Code Online (Sandbox Code Playgroud)
(一段等效代码。)
警告:当然,这根据语言的不同而有很大差异。这里我将使用 Javaswitch语句,因为它是一种常用的语言,并且它的switch语义似乎具有大致的代表性。
一些主要区别是:
match是详尽的(即您必须能够向编译器证明一个分支恰好匹配)match是一个表达式(尽管可以说这更像是 Rust 功能而不是match功能),即:let x = 123;
let s = match x {
0 => "zero",
1 => "one",
_ => "something else",
};
println!("{}", s); // prints "something else"
Run Code Online (Sandbox Code Playgroud)
match执行解构:let x = Some(123);
let s = match x {
None => "nothing".to_string(),
Some(x) => format!("the number: {}", x),
};
println!("{}", s); // prints "the number: 123"
Run Code Online (Sandbox Code Playgroud)
但是,您确实应该查看文档match并将其与另一种语言的相关功能的文档进行比较switch。这些只是与 C 类开关相比的明显差异。
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |