1

我在阶为较高kinded类型的用户定义的别名:扩展用户定义的更高kinded类型

type FutureOfLastError = Future[LastError] 

我也有该类型的值:

val myFuture: FutureOfLastError = ... 

要写入可读代码我想定义(例如)一种方法,如

def mapToString = { ... } 

它将FutureOfLastError的实例映射到Future [String]并调用它就像

myFuture mapToString 

我该怎么做?它甚至有可能吗?我已经试过在案例类中进行封装,我想到了各种各样的隐式转换。

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

回答

1

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

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

好极了。非常感谢您的回复。它工作完美。到目前为止,我只是不知道隐式类(我只是一个scala初学者,因为你可能已经猜到了...... ;-)) – jens 2013-03-04 10:19:54