2014-12-06 11 views
3

현재 나는 1 년 전에 끝난 Martin Odersky, Erik Meijer, Roland Kuhn의 온라인 과정 "Reactive Programming Principles of Reactive Programming" 을 연구 중입니다. 아무도 활동하지 않는다고 생각합니다. 이 과정의 토론 포럼에서 도움을 청하기 위해 여기에 제 질문을 올려 놓았습니다. 정말 고마워요. 세션에서 온라인 scala 과정에서 생성자의 flatMap

는 "기능 임의의 발전기가"마틴 flatMap 방법과 발전기의 구현을 제공합니다, 그것은 같은 것입니다 :

trait Generator[+T] { 
    self => // an alias for "this" 

    def generate: T 

    def map[S](f: T => S): Generator[S] = new Generator[S] { 
     def generate = f(self.generate) 
    } 

    def flatMap[S](f: T => Generator[S]): Generator[S] = new Generator[S] { 
     def generate = f(self.generate).generate 
    } 
} 

내가 여기 flatMap에 대한 아주 명확하지 않다, 그것은 새로운 생성기 [S 반환 ]에 정의 된 generate 메소드를 사용하지만 그 구현은 입력 함수 인수 f에서 "other"Generator [S]의 "other"generate 메소드에 의존합니다.

여기서 제 질문은 다음과 같은 유형

1) 입력 함수 f에 의해 발전기 [S] flatMap이 방법에 의해 리턴 된 발전기 [S]입니까입니까?

2) 동일하면 컴파일러가 자체적으로 정의하므로 생성 방법을 어떻게 해석합니까?

답변

1

는 내가 대답

1) 입력 함수 f에서 생성기 [S]와 flatMap 방법에 의해 반환되는 발전기 [S]가 같은 "추상적"타입 인 거 같아요,하지만 자신의 인스턴스는 다른 가질 수 따라서 "가상"생성 메소드가 다릅니다.

2) 입력 함수 f에 의해 반환 된 Generator [S]에 의한 생성 메소드는 이미 flatMap 컨텍스트에 정의되어 있어야합니다. 그들은 서로 다른 실제 유형으로부터 메소드를 생성합니다.