我有这样的事情:在功能转型上输入参数的副作用
object MyObject {
var element1 /**/
var element2 /**/
var myOtherObject: OtherObject = new OtherObject
}
object MyOtherObject {
var something1 /**/
var something2 /**/
var myList: List[T] = List()
}
def myUpdateFunction(iMyObject: MyObject) : SomeObject = {
var myCopiedObject = iMyObject
myCopiedObject.myList.dropRight
/*checkpoint*/
val myAwesomeOtherObject = new MyOtherObject
/*perform multiple tasks to update myAwesomeOtherObject members*/
myAwesomeOtherObject
}
当我检查的“关卡”注释行,我看到我的myCopiedObject.myList
已经成功地进行了改造,但myUpdateFunction
执行我的iMyObject
也有,即。 iMyObject.myList
被一个截断。
我不明白这是怎么发生的。
任何线索,任何人?
顺便说一句,我使用spark
iMyObject创建副本是为myObject的实例的引用。你赋值给myCopiedObject纯粹只是基于引用。您需要制作一个iMyObject的新副本。 –
在Scala中使用'var'被认为是一种不好的习惯,所以如果可以的话,应该避免它。 –