Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 扩展用户定义的更高级类型_Scala_Implicit Conversion_Higher Kinded Types_Companion Object - Fatal编程技术网

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

Scala 扩展用户定义的更高级类型,scala,implicit-conversion,higher-kinded-types,companion-object,Scala,Implicit Conversion,Higher Kinded Types,Companion Object,我有一个用户定义的别名,用于scala中更高级的类型: type FutureOfLastError = Future[LastError] 我还有一个这样的值: val myFuture: FutureOfLastError = ... 为了编写可读代码,我想定义(例如)一个方法,如 def mapToString = { ... } 它将FutureOfLastError的一个实例映射到一个Future[String],并像 myFuture mapToString 我该怎么做?有可

我有一个用户定义的别名,用于scala中更高级的类型:

type FutureOfLastError = Future[LastError]
我还有一个这样的值:

val myFuture: FutureOfLastError = ...
为了编写可读代码,我想定义(例如)一个方法,如

def mapToString = { ... }
它将FutureOfLastError的一个实例映射到一个Future[String],并像

myFuture mapToString
我该怎么做?有可能吗?我已经在一个case类中尝试过封装,我想到了各种隐式转换


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

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

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

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

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

伟大的非常感谢您很快的答复。它工作得很好。我只是不知道隐式类到目前为止(我只是一个scala初学者,你可能已经猜到了…;-)太好了。非常感谢您很快的答复。它工作得很好。到目前为止,我还不知道隐式类(正如你可能猜到的,我只是一个scala初学者…;-)