2016-09-12 2 views
2

, 그것은 인쇄 예상대로 고정 될 숫자 0에 빈 문자열 :확률은 "A, B, C 'I 다음 그루비 니핏을 실행하면

@CompileStatic 
public static void main(String[] args) { 
    def inList = ["a", "b", "c"] 
    def outList = inList.inject(0, { a, b -> a + "," + b }) 
    println(outList) 
} 

이는 "이 '0'클래스 'java.lang.String의'와 클래스 'java.lang의를 개체를 캐스팅 할 수 없습니다 예외를 만들어 작동하지 않습니다. 번호'". 문제는 컴파일러가 불평하지 않았다는 것입니다. 나는 Scala와 Kotlin (주사가 fold라고 불리는 곳)에서 이것을 시도했는데, 각각의 컴파일러는 예상대로 불일치에 대해 불평했다. 또한 Java8의 대응은 컴파일되지 않습니다 (그것은 말한다 발견 INT 필요 : java.lang.String의) :

List<String> list = Arrays.asList("a", "b", "c"); 
Object obj = list.stream().reduce(0, (x, y) -> x + y); 
System.out.println(obj); 

질문이 그루비에서 수정 될 수 있는지이 때문에 정적의 AA 일반적인 문제인지 지금 타이핑은 나중에 언어에 도입됩니다.

답변

3

Groovy의 버그라고 생각합니다 (아마도 100 % 확신 할 수는 없습니다), 아마도 어쩌면 형식 유추 어딘가에있을 수 있으며 수정 될 수 있습니다. Try to fill an issue in the bug tracker. 당신이 컴파일 오류를보고 싶다면

, 당신은

inList.inject(0, { String a, String b -> a + "," + b }) 

오류를 제공 폐쇄 매개 변수 유형을 제공 할 수 있습니다 : 응답에 대한

Expected parameter of type java.lang.Integer but got java.lang.String 
@ line 7, column 38. 
def outList = inList.inject(0, { String a, String b -> a + "," + b}) 
           ^
+0

감사합니다. 제안 된대로 문제를 만들었습니다. https://issues.apache.org/jira/browse/GROOVY-7934 – OlliP