switch和match语法的区别是什么?



有些语言有switch表达式/语句,有些语言有match语句。这在语义上有区别吗?或者这只是一个基本相同的东西的不同语法?

例如:

Rust有match:

match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter(state) => 25,
}

(取自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;
}

(一段等价代码)

注意:当然,这取决于语言。这里我将使用Javaswitch语句,因为它是一种常用的语言,而且它的switch语义似乎大致具有代表性。

  • match是详尽的(即你必须能够向编译器证明只有一个分支是匹配的)
  • match是一个表达式(尽管可以说这是一个Rust特性而不是match特性),即:
let x = 123;
let s = match x {
0 => "zero",
1 => "one",
_ => "something else",
};
println!("{}", s);  // prints "something else"
  • 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"

但是,您确实应该看看match的文档,并将它们与其他语言的switch相关特性的文档进行比较。这些只是与c类开关比较时的明显区别。

相关内容