我有这样的感觉,我可以进一步抽象我的代码,但我有点卡住了。我这样做更像是一个挑战,所以不要担心过早的优化。这是为我的开源库Reactive Kraken。斯卡拉,非常相似的类型的抽象逻辑
如果你看看这段代码,我相信你会明白我的意思。
case class Response[T](error: List[String], result: Option[Map[String, T]])
case class OrderResponse[T](error: List[String], result: Option[T])
def handleRequest[T: JsonFormat](request: HttpRequest): Future[Response[T]] =
fireRequest(request)
.map(_.parseJson.convertTo[Response[T]])
.recover { case t: Throwable => Response[T](List(t.getMessage), None) }
def handleOrderRequest[A: JsonFormat](request: HttpRequest): Future[OrderResponse[A]] =
fireRequest(request)
.map(_.parseJson.convertTo[OrderResponse[A]])
.recover { case t: Throwable => OrderResponse[A](List(t.getMessage), None) }
这两个函数之间的区别仅仅是它们返回的类型。你会怎么做呢?也许使用更高的 kinded类型?