如何向Observable特征添加方法?

时间:2015-03-07 17:36:11

标签: scala reactive-programming observable rx-scala

我想在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{
                                                                   ^

怎么了?

3 个答案:

答案 0 :(得分:4)

您不需要extends Observable。如果没有implicitextends Observable仍可以使用。

答案 1 :(得分:3)

rx.Observable采用泛型类型参数,代码不提供,因此出错。

应该是extends Observable[Double]

答案 2 :(得分:2)

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以供参考。