Switch statement 为什么switch语句的实现方式与大多数语言相同?
伪码Switch statement 为什么switch语句的实现方式与大多数语言相同?,switch-statement,Switch Statement,伪码 int i=10 switch(i) case 1: print(1); case 10: print(10); case 20: print(20); 直觉上,这将被期望打印10。但由于缺少break语句,因此将打印10和20 还有人认为这感觉像是语言中的错误吗?不是每种语言都允许在开关中出现故障。维基百科对此有一个明确的定义 C(C,C++,Objul-C)族允许默认通过 帕斯卡家族没有 Perl在默认情况下不会,但您可以通过包含con
int i=10
switch(i)
case 1:
print(1);
case 10:
print(10);
case 20:
print(20);
直觉上,这将被期望打印10。但由于缺少break语句,因此将打印10和20
还有人认为这感觉像是语言中的错误吗?不是每种语言都允许在
开关中出现故障。维基百科对此有一个明确的定义
- C(C,C++,Objul-C)族允许默认通过
- 帕斯卡家族没有
- Perl在默认情况下不会,但您可以通过包含
continue
关键字来请求它
- C#(比C更接近Java)需要一个
break
来结束每个case
块,但允许您将空块分组在一起:
- Swift不允许掉线,除了要求
开关
详尽无遗外,它还具有强大的模式匹配系统
对开关
语句有各种各样的要求。不是每种语言都一样!几个小例子:
// C#
switch (i) {
case 1:
case 2:
// you can group empty case blocks together
break; // but must end with break
case 3:
// do something else
break;
}
// Swift
switch i {
case 1: // match 1
case 2,3: // match 2 or 3
case 4...10: // match 4 to 10 (inclusive)
case let n where n % 2 == 0: // match an even number and assign it to n
default: // must be exhaustive
}
另请参见:并非每种语言都允许在开关中使用fall-through语句。维基百科对此有一个明确的定义
- C(C,C++,Objul-C)族允许默认通过
- 帕斯卡家族没有
- Perl在默认情况下不会,但您可以通过包含
continue
关键字来请求它
- C#(比C更接近Java)需要一个
break
来结束每个case
块,但允许您将空块分组在一起:
- Swift不允许掉线,除了要求
开关
详尽无遗外,它还具有强大的模式匹配系统
对开关
语句有各种各样的要求。不是每种语言都一样!几个小例子:
// C#
switch (i) {
case 1:
case 2:
// you can group empty case blocks together
break; // but must end with break
case 3:
// do something else
break;
}
// Swift
switch i {
case 1: // match 1
case 2,3: // match 2 or 3
case 4...10: // match 4 to 10 (inclusive)
case let n where n % 2 == 0: // match an even number and assign it to n
default: // must be exhaustive
}
另请参见:否,尽管这些案例经常被滥用,但失败案例可能会有所帮助。确保不要将模式匹配开关
s和匹配文本的开关
s混为一谈。不,失败案例可能会有所帮助,尽管它们经常被滥用。确保您没有将匹配文本的模式匹配开关
s和开关
s混为一谈。