2014-04-11 1 views
0

다음 코드 예제입니다 :이상한 행동은

class StaticTest { 

    static def list = [1, 2, 3] 

    void printsNothing() { 
    [].with { list.each { println it } } 
    } 

    void printsList() { 
    new Object().with { list.each { println it } } 
    } 

    public static void main(String[] args) { 
    new StaticTest().with { 
     println "Expected: " 
     printsList() 

     println "Strange: " 
     printsNothing() 
    } 
    } 
} 

당신이 볼 수 있듯이, 폐쇄 printsNothingprintsListlist 인 것처럼 정말로 아무것도 출력하지 printsNothing로 동일이, 그럼에도 불구하고 결과는 차이가 있습니다 빈. 결과는 다음과 같습니다.

invokedynamic 지원이 활성화 된 상태에서 Groovy 2.2.2를 사용하고 있습니다.

버그인지 또는 Groovy에 대해 알지 못합니다.

답변

2

이것은 빈 목록 (및 [].list == [])의 모든 요소에서 list 속성을 찾고 있기 때문에 user mailing list recently에있었습니다. printsNothing 메소드를 다음과 같이 변경하면

void printsNothing() { 
    // Use this.list to get round local `with` scoping 
    [].with { this.list.each { println it } } 
}