为什么Scala最后一个val不是返回值?

时间:2017-10-26 14:04:35

标签: scala

通常,在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?

1 个答案:

答案 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