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混为一谈。