switch 和 match 语法有什么区别?

1 match switch-statement

有些语言有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)

(一段等效代码。)

cam*_*024 5

警告:当然,这根据语言的不同而有很大差异。这里我将使用 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 类开关相比的明显差异。