Scala - Option - collect

Option 操作中的collect

def onlyHttps[A](action: Action[A]) = Action.async(action.parser) { request =>
request.headers.get("X-Forwarded-Proto").collect {
case "https" => action(request)
} getOrElse {
Future.successful(Forbidden("Only HTTPS requests allowed"))
}
}

从这个函数中学习到了collect的用法

明确下这里是Option的collect
还有其他包中的collect,比如collection中也有collect,效果稍微有些不同

collect中需要一个Partial Function
这个偏函数 就是一写case xx => xxxx
模式匹配的处理

Option[A] collect
过程如下:
collect 会把 A先解构出来,然后对A进行match 如果match到了, 就返回一个 Some(result) 没有就None
所以后面还可以继续接getOrElse

源码如下:


@inline final def collect[B](pf: PartialFunction[A, B]): Option[B] =
if (!isEmpty) pf.lift(this.get) else None

先this.get 解构内容, lift其实就是包装成了Option类型