2016-07-08 1 views
2
scala> def lift3[A,B,C,D] (
    | f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option 
[D]] = { 
    | (oa: Option[A], ob:Option[B], oc: Option[C]) => 
    | for(a <- oa; b <- ob; c <- oc) yield f(a,b,c) 
    | } 
lift3: [A, B, C, D](f: (A, B, C) => D)(Option[A], Option[B], Option[C]) => Option[D] 

, 다음 줄누군가 아래의 스칼라 코드를 설명 할 수 있습니까? 특히

이 여호수아 D Suereth에 의해 깊이에서 책 스칼라에서 가져
def lift3[A,B,C,D] (
      f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option 
    [D]] 

(2.1 목록 2 장). 나는 어떤 목적으로 추가 Option[D]이 봉사하는지 잘 모르겠다. 함수의 본문에서 코드는 출력 유형 D의 처음 세 매개 변수에만 매핑됩니다. 그렇다면 D이 입력 매개 변수 목록에 선언 되었습니까? 내가 놓친 게 있니?

필자의 제한된 이해로, 함수 선언을 매개 변수 (4 개의 매개 변수를 사용)로 취하고 4 개의 매개 변수를 사용하는 함수를 반환하는 함수로 읽습니다. 또한 반환 형식에 대한 언급이없는 이유는 무엇입니까? 미리 감사드립니다.

답변

3

필자는 제한된 이해로 함수 선언을 4 개의 매개 변수를 취하는 매개 변수로 사용하는 함수로 읽고 4 개의 매개 변수를 사용하는 함수를 반환합니다. 또한 반환 형식에 대한 언급이없는 이유는 무엇입니까?

Function3[A,B,C,D]은과 D 복귀 형이다 (타입 A, BC의) 3 파라미터를 가지는 함수 (또한 (A, B, C) => D로 기록 될 수 있으며,이 동일한 유형 정확하게). 따라서 Function3[Option[A], Option[B], Option[C], Option[D]]에서 Option[D]은 매개 변수 유형이 아닌 반환 유형입니다.

+0

감사 만의 문서에서 찾을 수 있습니다! 마지막 매개 변수가 반환 형식이라는 규칙과 관련한 문서를 가리킬 수 있습니까? – MojoJojo

+1

내 대답에있는 문서 링크가 있습니다 :) –

2

function3에는 3 개의 매개 변수가 필요합니다. D은 함수의 반환 형식입니다. 코드가하는 일은 3 개의 인수를 가진 함수를 취하고 3 개의 인수를 가진 함수를 반환합니다. 각 인수와 그 반환 유형은 Option으로 "해제"됩니다.

당신은 Function3here. 의 API 문서를 확인하실 수 있습니다 그리고 R 일반적인 유형에 대한 설명은 Function2

관련 문제