通常,在Scala中,返回值时不需要return关键字,最后一个值始终是返回值。
例如:
def sum(a: Int, b: Int): Int = {
a + b
}
将返回Int
a+b
。
但是,为什么在将总和分配给另一个val
时,它不会被视为返回值?
例如:
def sum(a: Int, b: Int): Int = {
val sum = a + b
}
将显示类型不匹配错误(预期Int
,得到Unit
)。这种行为背后的原因/逻辑是什么?
编辑:正如我从评论和答案中了解到的,并不是Scala最后一个val不是返回值,而是返回值。但是,val赋值返回Unit
而不是指定的类型。原因是:What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?
答案 0 :(得分:4)
因为Scala中的赋值评估为Unit
,所以可以证明:
Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_112).
Type in expressions for evaluation. Or try :help.
scala> val y = { val x = 4 }
y: Unit = ()
请注意,这与Java不同:
jshell> int x, y
x ==> 0
y ==> 0
jshell> x = (y = 4)
x ==> 4
为什么scala选择了此has been answered before