将对象的副本传递给方法

时间:2016-06-23 09:32:47

标签: scala

我遇到了一个问题,当使用循环并将对象传递给方法时,我的对象在方法返回时被修改,打破了下一次迭代。

我使用的代码非常详细,因此我将简化以下内容:

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或其他方法?

1 个答案:

答案 0 :(得分:0)

Car 类的名称成员可能是公开且可变的。 同样从foo函数的定义,签名是foo:(car:Car)Unit,这可能意味着它不是纯函数,在这种情况下是副作用函数(或过程),因为它修改了参数。您应该显式创建参数副本并改变副本。