首页 文章

扩展用户定义的更高级别的kinded类型

提问于
浏览
1

我在scala中有更高级别的kinded类型的用户定义别名:

type FutureOfLastError = Future[LastError]

我也有这种类型的值:

val myFuture: FutureOfLastError = ...

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

def mapToString = { ... }

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

myFuture mapToString

我怎样才能做到这一点?它甚至可能吗?我已经在一个案例类中尝试了封装,我想到了所有类型的隐式转换 .

我最喜欢的选择是类型别名上的伴随对象,但是我无法使它工作,因为我无法从伴随对象中调用trait Future(如map等)的方法 .

1 回答

  • 1

    你不需要实际扩展类,你可以只使用一个隐式类(这只是“丰富我的库”模式的语法糖) . 像这样简单的东西应该这样做:

    implicit class MyFutureOps( future: FutureOfLastError ) {
      def mapToString = future.map(_.toString)
    }
    

相关问题