如何向可观察特征添加方法



我想向Observable类添加一个方法。到目前为止,我所做的是:

object Extension {
implicit class ObservableExtensions(obs: Observable[Double]) extends Observable{
    def fakeMethod (alpha: Double): Observable[Double] = {
      obs
        .map(v => v+alpha) 
      }
    }
 }  

但我得到了:

Error: trait Observable takes type parameters
implicit class ObservableExtensions(obs: Observable[Double]) extends Observable{
                                                                   ^

怎么了?

您不需要extends Observable。如果没有CCD_ 4,CCD_。

类rx。Observable采用了一个泛型类型参数,而您的代码没有提供该参数,因此出现了错误。

可能应该是extends Observable[Double]

manish是真的,因为Observable实际上不仅仅是一种特质,它是一种参数化的特质。这意味着你必须为它提供一个类型参数,以便将它变成一个你可以实际扩展的特征(比如在class Foo extends Observable[Double]中,你将参数化的特征Observable变成特征Observable[Double],然后用它扩展类Foo

zxswing已经说过了,您根本不需要扩展Observable。只需进行

import rx.lang.scala.Observable
object Extension {
  implicit class ObservableExtensions(obs: Observable[Double]) {
    def fakeMethod(alpha: Double): Observable[Double] = obs.map(_+alpha) 
  }
}  
import Extension._
Observable
    .just(1.0, 2.0, 3.0)
    .fakeMethod(10)
    .subscribe(println, println, println)

参见http://docs.scala-lang.org/overviews/core/implicit-classes.html以供参考。

最新更新