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