switch 和 match 语法之间有什么区别?
What is the difference between the switch and match syntax?
有些语言有 switch
expression/statement,有些语言有 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;
}
(一段等价代码。)
警告:当然,这因语言而异。
在这里,我将使用 Java switch
语句,因为它是一种常用的语言,它的 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 开关相比的明显差异。
有些语言有 switch
expression/statement,有些语言有 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;
}
(一段等价代码。)
警告:当然,这因语言而异。
在这里,我将使用 Java switch
语句,因为它是一种常用的语言,它的 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 开关相比的明显差异。