我在让 Scala 从类型投影推断正确的类型时遇到一些麻烦。
考虑以下:
trait Foo {
type X
}
trait Bar extends Foo {
type X = String
}
def baz[F <: Foo](x: F#X): Unit = ???
然后以下编译正常:
val x: Foo#X = ???
baz(x)
但以下内容不会编译:
val x: Bar#X = ???
baz(x)
Scala 将“底层类型 String”视为x
,但丢失了以下信息x
is a Bar#X
。如果我注释类型,效果很好:
baz[Bar](x)
有没有办法让 Scala 推断出正确的类型参数baz
?
如果不是,那么导致不可能的一般答案是什么?
该程序通过在上下文中添加此隐式转换来进行编译:
implicit def f(x: Bar#X): Foo#X = x
由于这种隐式转换对于任何F <: Foo
,我想知道为什么编译器不自己这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)