为什么switch语句的实现方式与大多数语言相同?

时间:2017-03-24 00:07:41

标签: switch-statement

伪代码

int i=10

switch(i)
  case 1:
     print(1);
  case 10:
     print(10);
  case 20:
     print(20);

直观地说,这将打印10.但由于没有break语句,这将打印10和20。

是否有其他人认为这种语言错误?

1 个答案:

答案 0 :(得分:2)

并非每种语言都允许在switch语句中使用。维基百科上有一个brief section

  • C(C,C ++,Objective-C)系列默认允许通过
  • Pascal家族没有
  • Perl默认不是,但您可以通过添加continue关键字
  • 来询问
  • C#(比C更接近Java)需要break来结束每个case块,但允许您将空块组合在一起:
  • 除了要求switch详尽无遗之外,Swift不允许通过并具有强大的模式匹配系统。

switch语句有各种各样的要求。不是每种语言都一样!几个小例子:

// 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
}

另请参阅:Appropriate uses of fall-through switch statements