斯卡拉:重新分配给瓦尔

use*_*412 14 scala

我正在寻找一种方法来解决Scala中的以下编译错误.其中,我正在尝试更新变量clinSig的值,如果在调用method1时clinSig为null.

import org.joda.time.Instant 
import java.util.Calendar

class TestingClass {   
    method1(null)   
    private def method1 (clinSig : Instant) {
    if (clinSig == null) {
      val calendar = Calendar.getInstance()
      calendar.set(2011, 0, 5, 0, 0, 0)
      calendar.set(Calendar.MILLISECOND, 0)
      clinSig = new Instant(calendar.getTime)
    }
    print(clinSig)   
   } 
}
Run Code Online (Sandbox Code Playgroud)
error: reassignment to val
 [INFO]       clinSigUpdtDtTm = new Instant(calendar.getTime)
Run Code Online (Sandbox Code Playgroud)

任何输入都会有所帮助.

谢谢 !!!

Lee*_*Lee 16

方法参数是vals,因此您无法重新分配它们.您可以创建一个新的val并根据条件分配:

val updated = if (clinSig == null) {
    val calendar = Calendar.getInstance()
    calendar.set(2011, 0, 5, 0, 0, 0)
    calendar.set(Calendar.MILLISECOND, 0)
    new Instant(calendar.getTime)
}
else clinSig

println(updated)
Run Code Online (Sandbox Code Playgroud)