Scala函数返回值问题咨询:两段求和函数为何一段报错?
Scala函数返回值问题解析
第一段代码错误原因
第一段代码:
def sum(x: Int, y: Int ): Int = { val sum = x+ y }
报错的核心是代码块返回值类型不匹配。在Scala中,代码块的返回值由块内最后一个表达式的结果决定:
val sum = x + y是赋值语句,这类语句的返回类型是Unit(等价于Java的void,表示无实际返回值)- 但函数声明的返回类型是
Int,因此编译器抛出类型不匹配错误:
cmd2.sc:3: type mismatch; found : Unit required: Int
第二段代码正常运行的原因
第二段代码:
def sum(x: Int, y: Int ): Int = { val sum =x sum +y }
代码块的最后一行是sum + y,这是一个计算表达式,结果类型为Int,和函数声明的返回类型完全匹配,因此可以正常编译运行。
关于return语句的疑问解答
你提到的“return语句不能包含多个表达式”是误解:
- 你的两段代码都没有用到
return关键字——Scala默认采用表达式式编程风格,函数的返回值就是最后一个表达式的结果,不需要显式写return(仅在嵌套函数提前返回、跳出代码块等场景需要用到)。 - 如果要修改第一段代码使其正确,有两种方式:
- 把计算结果放在代码块最后一行:
def sum(x: Int, y: Int ): Int = { val sum = x + y sum // 最后一行是sum,类型为Int } - 显式使用
return(不推荐,不符合Scala惯用写法):def sum(x: Int, y: Int ): Int = { val sum = x + y return sum }
- 把计算结果放在代码块最后一行:
内容的提问来源于stack exchange,提问作者RABINDRA JAISWAL
相关产品推荐
相关产品推荐

