2014-06-06 2 views
7

폴 그레이엄 (Paul Graham)은 훌륭한 기사 Revenge of the Nerds에서 언어가 다양하다고 주장했습니다.어큐뮬레이터 제너레이터 테스트 - Java 8

우리는 수 n을받는 함수 accumulators-- 생성하는 함수를 작성하려면, 다른 수를 취 i와 n은 반환하는 함수를 반환 어큐뮬레이터 발생기를 작성 - 그는 좋은 운동을 언급 i만큼 증가합니다. 자바

솔루션은 내가 (람다 덕분에) 이미 그루비 유사를 작성하는 방법을 섬세한 방법입니다 자바 8 에 있는지, 궁금

public class Accumulator { 

    public interface Inttoint { 
     public int call(int i); 
    } 

    public static Inttoint foo(final int n) { 
     return new Inttoint() { 
      int s = n; 
      public int call(int i) { 
       s = s + i; 
       return s; 
      }}; 
    } 

    public static void main(String... args) { 
     Inttoint accumulator = foo(1); 

     System.out.println(accumulator.call(2) == 3); 
     System.out.println(accumulator.call(3) == 6); 
    } 

} 

, 아래를 참조하십시오. 시도했다 Function<Integer, Integer>

하지만이 컴파일러 오류가 붙어있다. 람다 표현식에서 참조

지역 변수는 최종이거나 효과적으로 최종

그래서 당신은 몇 가지 자바 (8) 솔루션을해야합니까?

모두의 그루비 한

def foo(n) { 
    return {n += it} 
} 

def accumulator = foo(1) 
assert accumulator(2) == 3 
assert accumulator(3) == 6 
+0

참조 또한 다른 언어로 축적 발전기의 PG의 카탈로그 : http://www.paulgraham.com/accgen.html –

답변