2012-01-26 4 views
1

Привет Я надеюсь узнать, какой правильный синтаксис состоит в том, чтобы лучше организовывать операторы Case во Flash AS3. Итак, ниже, например, вместо того, чтобы иметь 3 заявления о случаях, я не мог бы его каким-то образом организовать в 1?Как организовать инструкции case AS3 на одну строку?

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

ответ

6

Попробуйте это:

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

default: 
    pgBool = false; 
    //break; 

}

+0

Сладкие благодаря это работает! Это было быстро: D –

+0

Добро пожаловать :) Почему у вас есть два одинаковых случая? –

+0

О, это было случайно, хе-хе, мне там было 30, и они быстро удаляли их ... –

1

вы можете сделать это:

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

Вы также можете использовать оператор if вместо переключателя, тогда вы можете использовать & & и || Операторы:

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

Я не могу не заметить ... два из ваших случаев идентичны.

1

Рассмотрите возможность использования корпуса выключателя в этом примере. Корпус коммутатора - это не самый короткий способ написания кода, и он часто предлагает вам написать избыточный код (ваш пример является «хорошим примером плохого кода»).

Что ваш код делает, возможно, было написано так:

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

или

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

(безусловно, вы хотели бы повторно использовать массив/объект, если эта функция должна быть более чем один раз).

Как я уже видел, этот ответ был опущен несколько раз, я чувствую, что ему требуется более подробное объяснение.

Прежде всего, почему использование хэш-таблицы предпочтительнее для коммутационного футляра.

  1. Он масштабируемый. Если вы храните таблицу хеша вне функции, которая должна принять решение, вам не нужно изменять функцию, которая принимает решение, вы добавляете или удаляете ключ из таблицы, что является более гибким и позволяет читать более код. Он также позволяет выполнять изменения во время выполнения, что невозможно при использовании коммутатора.

  2. Хэш-стол называется так, потому что он хэширует ключи, гарантируя, что время доступа значения, хранящегося в таблице, является постоянным (и обычно очень маленьким). В то же время коммутационный регистр, закодированный в AS3, как простая цепочка предложений if-else, что означает, что чем дольше срок действия коммутатора, тем больше времени потребуется для проверки функции для каждого условия. В то время как коммутационный корпус дает вам определенный контроль над порядком, в котором тестируются условия, вы редко можете сказать заранее, что будет срабатывать чаще. Хэш-стол будет относиться ко всем условиям одинаково.

Это означает, что на практике существует никогда причина предпочесть включение случае хэш-таблицу.Некоторые языки, например, Python, даже не имеют такой конструкции по тем же причинам.

+0

О, это круто! Хорошо, так что в основном Bool проверяет, совпадает ли это, тогда это будет = 0 или 1 да? –

+0

Звучит интересно, я никогда не использовал эту технику. У меня будет попытка в будущем, но насколько я знаю, метод indexOf массива довольно медленный –

1

Не знаю, что другие случаи вы можете столкнуться, но на примере вы дали вы можете удалить заявление переключатель полностью с:

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

Спасибо! Я мог бы полностью использовать это для чего-то другого, однако для этого проекта все наши id начинаются с TS :( –

 Смежные вопросы

  • Нет связанных вопросов^_^