Scala 延迟型推理?

Scala 延迟型推理?,scala,Scala,鉴于以下内容不可编译 trait Wrapper[T]{ def apply[U](f: U) = f(this) } trait Mapper{ def apply[V](w: Wrapper[V]): Option[V] } 我们如何编写Wrapper.apply,以便这样的实例可以接受Mapper实例 问题是我无法正确约束U,因为所使用的函数(Mapper.apply)本身是泛型的 我也不能“升级”映射器的输入/输出类型。将应用于类型成员,因为函数是泛型的 我们如何编写W

鉴于以下内容不可编译

trait Wrapper[T]{
    def apply[U](f: U) = f(this)
}
trait Mapper{
    def apply[V](w: Wrapper[V]): Option[V]
}
我们如何编写
Wrapper.apply
,以便这样的实例可以接受
Mapper
实例

问题是我无法正确约束
U
,因为所使用的函数(
Mapper.apply
)本身是泛型的

我也不能“升级”映射器的输入/输出类型。将应用于类型成员,因为函数是泛型的

我们如何编写Wrapper.apply以便这样的实例可以接受映射器实例

那么,
def apply(f:Mapper)=f(this)

虽然这实际上并不直接接受
映射器
实例

当然,您可以将
Mapper
和函数获取方法都作为重载

我们如何编写Wrapper.apply以便这样的实例可以接受映射器实例

那么,
def apply(f:Mapper)=f(this)

虽然这实际上并不直接接受
映射器
实例


当然,您可以将映射器和函数接受方法都作为重载。

可能是这样的吗

trait Wrapper[T]{
  final def apply[U >: T](m: Mapper[U]): Option[T] = m(this)
}

trait Mapper[-T] {
  def apply[V <: T](w: Wrapper[V]): Option[V]
}
trait包装器[T]{
最终定义应用[U>:T](m:Mapper[U]):选项[T]=m(此)
}
特征映射器[-T]{

def apply[V可能是这样的

trait Wrapper[T]{
  final def apply[U >: T](m: Mapper[U]): Option[T] = m(this)
}

trait Mapper[-T] {
  def apply[V <: T](w: Wrapper[V]): Option[V]
}
trait包装器[T]{
最终定义应用[U>:T](m:Mapper[U]):选项[T]=m(此)
}
特征映射器[-T]{

def apply[V是的,我想我错过了最重要的部分,我想用不同的约束对映射器进行子类化,比如IntMapper{def apply[V
IntMapper
不能是您编写的
Mapper
的子类型。例如,您可以将约束设置为
Mapper
的类型参数以避免此问题。是的,我想我错过了最重要的部分,我想使用不同的约束对映射器进行子类化,如IntMapper{def apply][V
IntMapper
在编写时不能是
Mapper
的子类型。例如,可以将约束设置为
Mapper
的类型参数以避免此问题。