如何将AS3案例陈述组织到一行?

时间:2012-01-26 17:04:02

标签: flash actionscript-3 switch-statement case

您好我希望找到正确的语法来更好地组织Flash AS3中的Case语句。所以下面例如不是有3个案例陈述,我不能以某种方式将它组织成1?

switch (refID) 
{
    case "TS_38":
        pgBool = true;
        break;
    case "TS_37":
        pgBool = true;
        break;
    case "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}

我尝试了这个,但它在我的测试中没有用:

switch (refID) 
{
    case "TS_38", "TS_37", "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}

5 个答案:

答案 0 :(得分:6)

试试这个:

 switch (refID) 
{
case "TS_38":
case "TS_21":
case "TS_21":
    pgBool = true;
    break;

default:
    pgBool = false;
    //break;

}

答案 1 :(得分:1)

你可以这样做:

switch (refID) 
{
    case "TS_38":
    case "TS_21":
    case "TS_21":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}

答案 2 :(得分:1)

您也可以使用if语句而不是switch,然后您可以使用&&和||操作符:

if (refID == "TS_38" || refID == "TS_21" || refID == "TS_21") {
    pgBool = true;
} else {
    pgBool = false;
}

我不禁注意到......你的两个案件是相同的。

答案 3 :(得分:1)

在此示例中考虑不使用switch case。切换案例不是编写代码的最短方式,它经常会提示您编写冗余代码(您的示例是“错误代码的好例子”)。

您的代码可以像这样编写:

pgBool = ["TS_38", "TS_21"].indexOf(refID) > -1;

pgBool = refID in {"TS_38" : "", "TS_21" : ""};

(大多数情况下,您希望重用数组/对象,如果要多次调用此函数)。


正如我所看到的,这个答案被低估了几次,我觉得这需要更深入的解释。

首先,为什么使用散列表比switch-case更好。

  1. 可扩展。如果将哈希表存储在必须做出决定的函数之外,则无需更改决策的函数,添加或删除表中的键 - 这更灵活,允许更易读码。它还允许运行时修改,切换情况不可能。

  2. 调用散列表是因为它散列了密钥,确保存储在表中的值的访问时间是恒定的(通常非常小)。同时,在AS3中编码的switch-case作为if-else子句的简单链,这意味着切换情况越长,该函数验证每个条件所需的时间就越多。虽然switch-case可以让您对测试条件的顺序进行一定的控制,但您很少会事先告诉哪些情况会更频繁地触发。哈希表会平等对待所有条件。

  3. 这意味着,在实践中,从不有理由选择switch-case到hash-table。有些语言,特别是Python,甚至没有这个结构也是出于同样的原因。

答案 4 :(得分:1)

不知道您可能遇到的其他情况,但是您提供的示例可以完全删除switch语句:

if(refId.split("_")[0] == "TS"){
    pgBool = true;
}
else{
    pgBool = false;
}