用动态类型语言切换case语句

时间:2012-06-25 08:35:39

标签: switch-statement

我想知道动态类型语言在找到匹配的案例标签时的行为方式。它会继续评估尚未比较的其他标签值吗? (查找重复的案例标签或输入错误)。

常见的动态类型语言在那里表现如何?

2 个答案:

答案 0 :(得分:1)

我只能在这里说JavaScript,但是JavaScript会首先检查两个操作数是否属于同一类型,然后检查值,从而搜索匹配的标签。如果找到匹配项,switch case将执行与标签关联的语句并中断switch语句(如果找到break语句)。

示例:

notANumber='0'

switch (notANumber) {
  case 0:
    alert("It's a number, Jim.");
    break;
  case '0':
    alert("It's a string, Jim.");
    break;
}

这将显示弹出窗口It's a string, Jim.。它实际上与C开关没什么不同(遗憾的是 - )。

修改

这里使用===运算符进行比较,它不仅测试值,还测试类型。如果使用==运算符,则只会测试操作数的值(这将导致第一种情况为真)。

答案 1 :(得分:1)

有两种众所周知的切换方法,与动态无关,但案例标签通常是文字。

发生的事情取决于失败。

隐式直通会执行代码中案例顺序匹配的所有情况。

显式掉线会执行第一个匹配的情况,除非您明确跳转到另一个可以在交换机中的任何位置的案例标签,否则不会执行其他情况。