我有這樣的事情:在功能轉型上輸入參數的副作用
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'被認爲是一種不好的習慣,所以如果可以的話,應該避免它。 –