Могу ли я использовать оператор 'is' в переключателе в Dart? - PullRequest
0 голосов
/ 28 февраля 2019

Мне кажется, что это глупый вопрос, но я не могу заставить его работать.

Что у меня есть:

if (current is classA){
   //do stuff
   return;
}
if (current is classB){
   //do stuff
   return;
}
if (current is classC){
   //do stuff
   return;
}

Что я хочу:

switch (currentState) {
   case is classA: { 
      //do stuff
      break;
   }
   case is classB: { 
      //do stuff
      break;
   }
   case is classC: { 
      //do stuff
      break;
   }
}

Что я действительно хочу (Kotlin):

When (currentState){
   is classA -> //do stuff
   is classB -> //do stuff
   is classC -> //do stuff
}

Есть ли в любом случае, я могу использовать Dart Switch как оператор Kotlins When, или, по крайней мере, использовать другие операторы затем ==, чтобы утверждать оценки случая?

1 Ответ

0 голосов
/ 01 марта 2019

Нет.

Корпус переключателя Dart представляет собой конструкцию очень низкого уровня.Он допускает только выражения с постоянными значениями, которые не переопределяют оператор == (за исключением нескольких базовых типов платформ), поэтому эффективно его можно реализовать с помощью проверок identical.

Невозможно выполнитьсложные проверки, или проверки типа объекта, только проверки личностиdoStuff член, а затем выполните:

 currentState.doStuff()

Если это невозможно, вы вернетесь к последовательности if.

...