Groovy оператор переключателя с несколькими переменными - PullRequest
0 голосов
/ 16 января 2019

Можно ли иметь оператор switch-case с более чем переменной в groovy? Я пытался с кортежами, но часть дела не принимает более одного аргумента.

Я пытаюсь избежать нескольких вложенных операторов if вместо

if (a==1) {
  if (b==2) {
    if (c==3) {
      // do something
    }
  }
}
else {
  if (a==4) {
    if (b==5) {
      if (c==6) {
        //do something else 
      }
    }
  }
}

Могу ли я сделать:

switch(a,b,c) { 
  case : (1,2,3) // if a==1, b==2 and c==3
    // do something 
    ... 
  case : (4,5,6)
    // do something else  
    ... 
  } 
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Исходя из ваших правок, я считаю, что это должно работать:

if (a == 1 && b == 2 && c == 3) {
  // do something
} else if (a == 4 && b == 5 && c == 6) {
  // do something else
}

Если вместо этого вы хотите использовать оператор switch, это возможно:

def val = [a, b, c]
switch (val) {
    case {it == [1, 2, 3]}:
        // something
        break;
    case {it == [4, 5, 6]}:
        // something else
        break;
0 голосов
/ 16 января 2019

Groovy - это просто грязная Java, вам не нужно никакого определения класса. все, что вы пишете в java-методе, вы можете написать прямо в groovy.

switch (num) {
case 1:
case 2:
case 3:
   System.out.println("1 through 3");
   break;
case 6:
case 7:
case 8:
    System.out.println("6 through 8");
 break;
}

Чтобы ответить на ваш вопрос, внутри переключателя нам нужно выражение, а не параметры функции.

...