Scala 在实现/重写方法时提供类型类
我更喜欢使用类型类,但有一些问题: 给定以下接口Scala 在实现/重写方法时提供类型类,scala,typeclass,Scala,Typeclass,我更喜欢使用类型类,但有一些问题: 给定以下接口 trait Processor[A] { def process[B](f: A => B): Processor[B] } 由于其他原因,我有一个实现需要一个排序[A]。因此,方法process需要排序[B]来构造处理器[B]。以下是我想做的,但显然不起作用: class Plant[A, OA <: Ordering[A]] extends Processor[A] { def process[B:Ordering](f
trait Processor[A] {
def process[B](f: A => B): Processor[B]
}
由于其他原因,我有一个实现需要一个排序[A]
。因此,方法process
需要排序[B]
来构造处理器[B]
。以下是我想做的,但显然不起作用:
class Plant[A, OA <: Ordering[A]] extends Processor[A] {
def process[B:Ordering](f: A => B): Processor[B] = null // Plant[B, OB <: Ordering[B]]
}
class Plant[A,OA B]:处理器[B]=null//Plant[B,OBNo,这应该根本不起作用。鉴于您对处理器的定义,此代码将编译:
val processor: Processor[Int] = foo() // foo() is some function that returns a Processor
processor.process[Object](x => new Object())
现在如果foo
实际实现为
def foo() = new Plant[Int]()
那么它的过程
方法将无法与B=Object
一起工作,我不确定我是否完全理解您试图实现的目标,但也许您可以使处理器
在上下文绑定上通用
trait Processor[A, Bound[_]] {
def process[B: Bound](f: A => B): Processor[B, Any]
}
class Plant[A: Ordering] extends Processor[A, Ordering] {
def process[B: Ordering](f: A => B) = ???
}