【发布时间】:2018-10-22 19:14:07
【问题描述】:
看看这段代码。
trait SomeMix {
}
trait Processor[T] {
def processMix(t: T with SomeMix) = {
println("processing T with Mix")
}
def processAsUsual(t:T)= {
println("processing T")
}
def process(t:T) = {
t match {
case mix: SomeMix => processMix(mix) // <---- error here
case _ => processAsUsual(t)
}
}
}
愚蠢的 Scala 编译器在这里显示错误:
错误:(22, 39) 类型不匹配; 找到:mix.type(具有基础类型 SomeMix) 必需:带有 SomeMix 的 T 案例组合:SomeMix => processMix(mix)
它不明白我匹配到 SomeMix 的表达式已经是 T 类型。好的,让我们帮助他。更改代码:
def process(t:T) = {
t match {
case mix: T with SomeMix => processMix(mix) // <---- warning here
case _ => processAsUsual(t)
}
}
现在它同意一切都是正确的,但显示警告:
警告:(22, 17) 抽象类型模式 T 未选中,因为它已被擦除消除 case mix: T with SomeMix => processMix(mix)
这里有什么避免错误和警告的好方法吗?
【问题讨论】: