当存在显式方法时,为什么 Scala 无法推断方法的返回类型return
方法中使用的语句?
例如,为什么下面的代码可以编译?
object Main {
def who = 5
def main(args: Array[String]) = println(who)
}
但以下则不然。
object Main {
def who = return 5
def main(args: Array[String]) = println(who)
}
方法的返回类型可以是定义它的块中最后一个语句的类型,也可以是定义它的表达式的类型(如果没有块)。
当你使用return
在方法内部,您引入了该方法可能返回的另一个语句。这意味着 Scala 无法确定其类型return
当它被发现时。相反,它必须继续进行,直到方法结束,然后组合所有退出点来推断它们的类型,然后返回到每个退出点并分配它们的类型。
这样做会增加编译器的复杂性并减慢编译器的速度,唯一的好处是在使用时不必指定返回类型return
。另一方面,在本系统中,返回类型的推断无需依赖于 Scala 已经使用的有限类型推断。
因此,最终,在编译器复杂性和所获得的收益之间的平衡中,后者被认为不值得前者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)