Scala中使用return关键字出现类型不匹配错误的原因是什么?
问题核心原因
这个错误本质是Scala中return关键字的作用域规则,和匿名函数的返回值逻辑有本质区别:
无return时正常运行的原因
你没有添加return时,foldLeft传入的匿名函数的最后一行执行结果,就是这个匿名函数自身的返回值,刚好符合foldLeft要求的(List[T], List[T])类型,因此编译正常,逻辑也符合预期。
添加return后类型不匹配的原因
Scala中return关键字永远只会从它最近的命名方法/函数中返回,不会从当前所在的匿名函数返回。
你代码里的return写在foldLeft的匿名回调函数内部,它最近的包含它的命名方法就是外层的longestSublist,而这个方法声明的返回类型是List[T],但你return的是二元组(List[T], List[T]),二者类型不匹配,因此编译器直接抛出类型错误。
哪怕你把return后面的值改成List[T]类型编译通过,逻辑也完全不符合你的预期:因为return会直接终止整个longestSublist方法的执行,遍历到第一个元素就会直接返回结果,不会继续执行foldLeft的全量遍历逻辑。
补充说明
Scala的匿名函数本身不支持用return返回自身的执行结果,匿名函数的返回值只能是代码块最后一行表达式的计算值,不需要也不能加return关键字。
内容的提问来源于stack exchange,提问作者Naruto Uzumaki
相关产品推荐
相关产品推荐

