我有這樣的感覺,我可以進一步抽象我的代碼,但我有點卡住了。我這樣做更像是一個挑戰,所以不要擔心過早的優化。這是爲我的開源庫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類型?