switch
операторы в Groovy бесконечно более гибки, мощны и применимы, чем в Java. По этой причине я только что захотел использовать вложенный switch
впервые в Groovy.
С этим:
outerSwitch:
switch( var1 ){
case 'x':
...
break
case 'y':
switch( var2 ){
case 'a':
// something
break outerSwitch
...
}
...
}
... Я получаю ужасное сообщение от компилятора Groovy, в котором говорится: «Groovy: оператор break с именованной меткой разрешен только внутри циклов». Я не знаю, то же самое с Java.
Существует очевидный глупый обходной путь: вы заключаете свой внешний switch
в while( true )
, применяете к нему метку outerSwitch
и помещаете оператор break
в конце вашего внешнего switch
.
Или вы могли бы сделать for( int i = 0; i < 1; i++ )
... или использовать идиому Groovy-er для той же вещи, я забыл, каковы все варианты ... хотя попробовал
outerSwitch:
1.times{
switch( var1 ){
...
}
... Я обнаружил, что Groovy-компилятор выдает такое же неприятное сообщение. Так что, похоже, нельзя обмануть его замыканием.
Есть ли в Groovy наборы инструментов и наборы трюков, которые позволяют более разумно выпрыгнуть из внешнего switch
из вложенного switch
?
Проблема, я полагаю, в том, что когда вы break
из case
блока не делаете это со значением ... если бы вы могли перейти break true
или break 'fiddle-de-dee'
, это было бы очевидно способы решить это.
Очевидным обходным решением является то, что вы можете предшествовать вложенному switch
с def breakouter = false
, а затем изменить его, как это применимо, в блоке case
. Я просто надеюсь, что Groovy предоставит что-то более элегантное ...