2016-12-29 24 views
2

私は次のメソッドシグネチャの周りを頭で囲んでいます。私は、logAccessは2つのパラメータリストを取り、戻り値の型が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は、2つのパラメータのリストを受け取り、(RouteResult =>オプション[ログ・エントリ])を返す関数であり、すなわち、RouteResultを受け取り、オプション[ログ・エントリ]を返す関数です。

構文 "{case whatever => ...}は、FunctionのサブクラスであるPartialFunctionのインスタンスである部分的な関数を定義しますas you can see in the documentation。この部分関数はRouteResultを受け入れ、Option [LogEntry ]であれば(RouteResult => Option [LogEntry])、logAccessから返すことができます

関連する問題