【问题标题】:Ruby's Case statement vs Javascript's Switch statementRuby 的 Case 语句与 Javascript 的 Switch 语句
【发布时间】:2017-07-27 21:26:33
【问题描述】:

我刚刚学习了 Javascript 的 Switch 语句,并认为它的工作方式与 Ruby 的 Case 语句相同。但是它略有不同,我不明白为什么 Switch 语句会继续打印出其余的行。请看下面的对比示例:

    option = 2
    case option
    when 1 
      print "You selected option 1."
    when 2
      print "You selected option 2."
    when 3
      print "You selected option 3."
    when 4
      print "You selected option 4."
    end

Ruby 中的上述 case 语句只会打印出:You selected option 2.

但是,当它翻译成 Javascript 的 Switch 语句时:

    var option = 2
    switch (option) {
      case 1:
        console.log("You selected option 1.");
      case 2:
        console.log("You selected option 2.");
      case 3:
        console.log("You selected option 3.");
      case 4:
        console.log("You selected option 4.");
    }

上面的 Switch 语句会打印出来

    You selected option 2.
    You selected option 3.
    You selected option 4.

我必须在 Switch 语句中的每个 case 后面加上一个 break 以使其工作。

有人能解释一下为什么吗?有没有更简单的方法或方法可以在 Javascript 中做到这一点?

【问题讨论】:

  • 您必须在每个案例之后添加一个break。这就是语言的设计方式。除了 Java、C、PHP 和几乎所有的语言。
  • @JoeFrambach:“几乎所有语言都在阳光下。”虽然评论的其余部分完全正确,但这显然是错误的。它只是语法深受 C 启发的语言家族。例如,Lisp、Elixir、Pascal、Modula 2、Perl、Fortran 和许多其他语言都采用与 Ruby 相同的方法。

标签: javascript ruby switch-statement conditional case


【解决方案1】:

JavaScript 遵循 C 的传统,要求显式的 break 脱离 switch。 C++ 和 Java 在这方面是相同的,以及(我敢肯定)无数其他 C 衍生产品。

退出case

switch (something) {
  case value:
    console.log("whatever");
    break;
  case other:
    console.log("other");
    break;
}

没有break,执行“落空”到后续的case 块。

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 2015-07-16
    • 1970-01-01
    • 2018-05-05
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多