2016-12-29 2 views
2

다음 서명 메서드 주위에 머리를 감싸려고합니다. LogAccess는 두 개의 매개 변수 목록을 사용하고 반환 유형이 LogEntry 인 함수를 반환하는 함수라고 생각합니다.스칼라 함수 : 반환 형식은 무엇입니까

또는 반환 유형은 느리게 평가되는 RouteResult입니다.

def logAccess(remoteAddress: RemoteAddress, start: Long)(request: HttpRequest): RouteResult => Option[LogEntry] = { 
    case RouteResult.Complete(result) => 
    val ip = remoteAddress.toOption.map(_.getHostAddress) 
    val state = sisCache.get 
    statsWriter.recordAccess(state, request.uri.toString, request.method.name, ip, result.status.intValue, time.ms - start) 
    Some(LogEntry(s"state: $state, clientIP: $ip, uri: ${request.uri}, method: ${request.method.name}, status: ${result.status}, took: ${time.ms - start}ms", InfoLevel)) 
    case RouteResult.Rejected(rejections) => 
    None 
} 

답변

2

logAccess은 즉, 두 개의 매개 변수리스트를 받아들이고 (RouteResult => 옵션 [LogEntry])를 반환하는 함수, RouteResult을 취하고 옵션 [LogEntry]를 반환하는 함수이다.

구문 "{case whatever => ...}는 Function의 서브 클래스 인 PartialFunction의 인스턴스 인 부분 함수를 정의합니다 (as you can see in the documentation).이 부분 함수는 RouteResult를 받아 들여 Option [LogEntry ] 인 경우 (RouteResult => Option [LogEntry])이며 logAccess에서 반환 될 수 있습니다.