【发布时间】:2015-04-30 15:19:57
【问题描述】:
在 Scala 2.11.5 中,编译这个
object Tryout {
trait A {
def method(a: Int): Boolean
}
abstract class B extends A {
def method(a: Int) = ???
}
new B {
override def method(a: Int) = true // type mismatch here
}
}
在“真”处产生“类型不匹配:找到布尔值,不需要任何内容”。如果我用 true 或 false 替换 ???,它会编译。如果我在抽象类中指定“方法”的结果类型,它也会编译。
这不是什么大问题。但是我很好奇是否有人可以解释为什么 ??? 没有被正确推断为布尔值?
【问题讨论】:
-
在抽象类 B 中将其更改为
def method(a: Int): Boolean = ???。 -
这实际上是一个已知的错误。如果我能找到票,我会链接它。我相信它会在 2.12 中修复。
-
@wheaties 你确定这是一个错误吗?在我看来,编译器会推断出最具体的类型(Nothing 是 Boolean 的子类型),这似乎是一致的。
-
为什么你认为它是一个错误......?看起来一致...
-
因为你覆盖了界面中给出的类型
标签: scala inheritance types