1

我在 scala 中有一个更高种类的用户定义别名:

type FutureOfLastError = Future[LastError]

我也有这种类型的值:

val myFuture: FutureOfLastError = ...

要编写可读的代码,我想定义(例如)一个方法,如

def mapToString = { ... }

它将 FutureOfLastError 的实例映射到 Future[String] 并将其称为

myFuture mapToString

我怎样才能做到这一点?甚至可能吗?我已经尝试过封装在一个案例类中,我想到了各种隐式转换。

我最喜欢的选择是类型别名上的伴生对象,但我无法让它工作,因为我无法从伴生对象调用特征 Future 的方法(如 map 等)。

4

1 回答 1

1

您不需要实际扩展类,只需使用隐式类(这只是“丰富我的库”模式的语法糖)。像这样简单的事情应该做到这一点:

implicit class MyFutureOps( future: FutureOfLastError ) {
  def mapToString = future.map(_.toString)
}
于 2013-03-04T09:56:05.350 回答