2013-02-08 2 views
4

저는 초보 프로그래머입니다. 정적 컴파일 (@CompileStatic annotation)을 사용하여 switch-case-break 명령문의 이상한 동작에 직면했습니다. break은 무시됩니다.
문서를 읽는 동안 버그가 있거나 뭔가를 놓쳤습니다.Groovy 2.1.0 @CompileStatic을 사용하는 switch-case-break 문의 이상한 동작

환경 :

- groovy sdk 2.1.0 
    - Oracle JDK build 1.7.0_13-b20 on Mac OS X Lion 10.7.5 

테스트 케이스 :

import groovy.transform.CompileStatic 
@CompileStatic 
class Test { 
    def test() { 
     ['A', 'B', 'C'].each { String val -> 
      switch (val) { 
       case 'A' : 
        println("${val} caseA") 
        break 
       case 'B' : 
        println("${val} caseB") 
        break 
       default : 
        println("${val} default") 
      } 
     } 
    } 
} 
(new Test()).test() 

출력 :

A caseA 
A caseB 
A default 
B caseB 
B default 
C default 

두 번째 테스트 : 단지 @CompileStatic

주석과 everithing가 지느러미를 작동 전자가 : 해결 될 때까지로

A caseA 
B caseB 
C default 
+1

나에게 벌레처럼 보이는하여 case 문 표지 블록을 사용할 수 있습니다, 해제, 당신은 [멋져요 JIRA] (http://jira.codehaus.org/browse에보고 할 수 있습니다/그루비)? –

+0

예, 방금 신고했습니다 [GROOVY-5984] (http://jira.codehaus.org/browse/GROOVY-5984) –

+1

쿨 :-) ([어제는 고정 된 것처럼 보입니다] (https : // github.com/groovy/groovy-core/commit/89d3c59e5dd377989121ffaddc293c0915ebf69c)) 2.1.0을 사용하여이 작업을 수행하기 위해 다음과 같은 불쾌한 해결 방법을 게시했습니다. –

답변

2

이 그루비 2.1.0의 버그 것 같다 (는 그루비 2.1.1에서 해결 될 것 같은 감사는 JIRA에 게시, 그것은 본다) 이것은 당신이 break

 switch (val) { 
      case 'A' : A:{ 
       println("${val} caseA") 
       break 
      } 
      case 'B' : B:{ 
       println("${val} caseB") 
       break 
      } 
      default : 
       println("${val} default") 
     } 
+0

Tim, 해결 방법을 제공해 주셔서 감사합니다. –