我遇到了一个问题,当使用循环并将对象传递给方法时,我的对象在方法返回时被修改,打破了下一次迭代。
我使用的代码非常详细,因此我将简化以下内容:
val car: Car = expensiveMethod("greenCar")
for (i <- 1 to 5) {
foo(car)
}
def foo (car: Car) = {
assert(car.name == "greenCar")
car.name = "redCar"
}
expensiveMethod
听起来很昂贵,所以我不想每次都在for循环中调用它。
Car也不是一个案例类,所以我不能使用内置的copy
方法。
是否有一种简单的方法可以将car
的副本发送到foo
或其他方法?
答案 0 :(得分:0)
Car 类的名称成员可能是公开且可变的。 同样从foo函数的定义,签名是foo:(car:Car)Unit,这可能意味着它不是纯函数,在这种情况下是副作用函数(或过程),因为它修改了参数。您应该显式创建参数副本并改变副本。