У меня возникла проблема, когда при использовании цикла и передачи объекта в метод мой объект изменяется при возврате метода, прерывая следующую итерацию.Передача копии объекта методу
код я использую довольно сложный, поэтому я буду упрощать следующим:
val car: Car = expensiveMethod("greenCar")
for (i <- 1 to 5) {
foo(car)
}
def foo (car: Car) = {
assert(car.name == "greenCar")
car.name = "redCar"
}
expensiveMethod
является, как это звучит, дорого, поэтому я бы предпочел не называть его внутри для цикла каждый раз. Автомобиль также не относится к классу case, поэтому я не могу использовать встроенный метод copy
.
Есть ли простой способ отправить копию car
в foo
или альтернативный подход?
Автомобиль - это Java не scala, и ваш метод foo не является допустимым методом Scala (он не компилируется), так как вы делаете переназначение в val ... – Simon
Упс. Исправлена подпись метода, теперь должно быть хорошо. – karoma
Нет, все еще есть переназначение val (car.name =, хотя автомобиль является val как аргумент метода). – Simon