Scala函数:什么是返回类型

时间:2016-12-29 19:06:04

标签: scala function lambda

我试图围绕以下方法签名。我相信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
 }

1 个答案:

答案 0 :(得分:2)

logAccess是一个函数,它接受两个参数列表并返回一个(RouteResult => Option [LogEntry]),即一个接受RouteResult并返回Option [LogEntry]的函数。

语法“{case whatever => ...}定义了一个部分函数,​​它是PartialFunction的一个实例,它是Function as you can see in the documentation的一个子类。由于这个部分函数接受一个RouteResult并返回选项[LogEntry],它是一个(RouteResult => Option [LogEntry]),可以从logAccess返回。