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) = ???
}