gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:43:32 25 4
gpt4 key购买 nike

在 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”处产生“类型不匹配:发现 bool 值,不需要任何内容​​”。如果我将 ??? 替换为 true 或 false,它会编译。如果我在抽象类中指定“方法”的结果类型,它也会编译。

这不是什么大问题。但是我很好奇是否有人可以解释为什么 ??? 没有被正确推断为 bool 值?

最佳答案

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

abstract class A {
def foo: Any
}

abstract class B {
def foo: Int
}

new B {
def foo = 1
}

所以当你在 B 中声明 def method(a: Int) = ??? 时,??? 被推断为 Nothing,因为 scala 编译器不知道您需要 Boolean 还是 Nothing。这就是为什么显式声明返回类型总是一个好主意的原因之一。

关于Scala - 推断为错误类型,导致类型不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com