Scala:无法将var:Assignment的对象属性更改为val

时间:2017-10-26 16:21:47

标签: scala

我很困惑这里的问题是什么。我有一个功能:

def myFunc(activity:Activity):updatedActivity = {
    //var updatedActivity:Activity = activity <- This doesnt work either
    var updatedActivity:Activity = activity.copy()

    val params =  Params (
      "Attribute"
    )

    updatedActivity.parameters = params
    updatedActivity
}

这不起作用,因为重新分配属性updatedActivity.parameters = params会引发val错误的重新分配,即使updatedActivity是var。如何更新传入的活动参数并将其返回?

2 个答案:

答案 0 :(得分:4)

updatedActivity可以是var但是类Activity有一个名为parameters的字段,它是一个val。 所以必须在施工期间分配。

如果是案例类,请尝试:

def myFunc(activity:Activity):updatedActivity = {   
    val params =  Params (
      "Attribute"
    )

    activity.copy(parameters = params)
}

如果它不是case类,它必须作为常规参数传递给构造函数,即

new Activity(params)

答案 1 :(得分:1)

我假设Activitycase class。即使updatedActivityvar,基础值(案例类)也是不可变的,这意味着您可以重新分配updatedActivity,但不能更改当前值。相反,你可以返回:

updatedActvity.copy(parameters = params)