2013-02-08 69 views
4

我是新手groovy程序員,面臨switch-case-break語句與靜態編譯(@CompileStatic註釋)的奇怪行爲。看起來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工作鰭片E:

A caseA 
B caseB 
C default 
+1

看起來像我的錯誤,你可以在[Groovy的JIRA(http://jira.codehaus.org/browse舉報/ GROOVY)? – 2013-02-08 14:30:28

+0

是的,我剛剛報告了它[GROOVY-5984](http://jira.codehaus.org/browse/GROOVY-5984) – 2013-02-08 15:04:19

+1

酷:-)([看起來像昨天已修復](https:// github.com/groovy/groovy-core/commit/89d3c59e5dd377989121ffaddc293c0915ebf69c))我發佈了一個模糊的令人不愉快的解決方法,以使其與2.1.0兼容:-) – 2013-02-08 15:13:10

回答

2

這似乎是在Groovy 2.1.0中的錯誤(感謝它發佈到JIRA,它看起來像它會被固定在Groovy 2.1.1)

作爲一種變通方法,直到這個被釋放,可以使用標塊爲case語句與break

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

Tim,感謝您的解決方法。 – 2013-02-08 15:12:33