如何向 Observable 特征添加方法?
How to add a method to Observable trait?
我想在 Observable
class 中添加一个方法。到目前为止我所做的是:
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{
^
怎么了?
class rx.Observable 采用泛型类型参数,您的代码不提供该参数,因此出现错误。
应该是extends Observable[Double]
.
您不需要 extends Observable
。 implicit
在没有 extends Observable
的情况下仍然有效。
manish 是真的,因为 Observable 实际上不仅仅是一个特征,它是一个参数化的特征。这意味着你必须为它提供一个类型参数,以便将它变成一个你可以实际扩展的特征(比如在 class Foo extends Observable[Double]
中,你将一个参数化特征 Observable
变成一个特征 Observable[Double]
并且然后用它扩展 class Foo
。
zxswing已经说了,你根本不需要extends 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。
我想在 Observable
class 中添加一个方法。到目前为止我所做的是:
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{
^
怎么了?
class rx.Observable 采用泛型类型参数,您的代码不提供该参数,因此出现错误。
应该是extends Observable[Double]
.
您不需要 extends Observable
。 implicit
在没有 extends Observable
的情况下仍然有效。
manish 是真的,因为 Observable 实际上不仅仅是一个特征,它是一个参数化的特征。这意味着你必须为它提供一个类型参数,以便将它变成一个你可以实际扩展的特征(比如在 class Foo extends Observable[Double]
中,你将一个参数化特征 Observable
变成一个特征 Observable[Double]
并且然后用它扩展 class Foo
。
zxswing已经说了,你根本不需要extends 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。