Scala - 推断为错误类型,导致类型不匹配?

Geo*_*org 1 inheritance types scala

在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
  }
}
Run Code Online (Sandbox Code Playgroud)

在"真实"处产生"类型不匹配:找到布尔值,需要无效".如果我???用true或false 替换它,它会编译.如果我在抽象类中指定"方法"的结果类型,它也会编译.

这不是一个大问题.但是我很好奇是否有人可以解释为什么???没有正确推断为布尔值?

Mic*_*jac 6

Scala允许您在子类中使继承方法的返回类型更具限制性.

abstract class A {
    def foo: Any
}

abstract class B {
    def foo: Int
}

new B {
    def foo = 1
}
Run Code Online (Sandbox Code Playgroud)

所以当你声明def method(a: Int) = ???B,???推断为Nothing,因为scala编译器不知道你是否想要BooleanNothing.这是明确声明返回类型总是一个好主意的原因之一.