如果在Scala中返回则出错

mum*_*yan -8 if-statement scala return

def vertify(a:Int):Int= {
    val result = 3
    if(a>4) {
        val result = a
    }
    return result
}
Run Code Online (Sandbox Code Playgroud)

我定义了上面的函数,然后使用它:

scala> vertify(5)
res4: Int = 3
Run Code Online (Sandbox Code Playgroud)

为什么结果3而不是5?

mik*_*kej 6

if(a>4) {
  val result = a
}
Run Code Online (Sandbox Code Playgroud)

这是创建第二个val名称result,它只在if块内部作用域(可见),因此return语句总是返回第2行定义的值.

A val无法重新分配,因此var如果需要更改值,则需要使用a :

var result = 3
if (a > 4) {
  // no `var` or `val` prefix indicates we are
  // referring to an existing variable that's already declared
  result = a
}
Run Code Online (Sandbox Code Playgroud)

但对于像这样的简单情况,你可以避免变量并使用:

def vertify(a: Int): Int = if (a > 4) a else 3
Run Code Online (Sandbox Code Playgroud)