2016-06-23 2 views
1

루프를 사용하여 개체를 메서드에 전달할 때 메서드가 반환 될 때 개체가 수정되어 다음 반복이 중단됩니다.메서드의 개체 복사본을 전달하십시오.

내가 사용하는 코드는 매우 정교한, 그래서 다음과 같이 간단합니다 : 그것은, 고가의 소리,

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 루프마다. 자동차도 케이스 클래스가 아니므로 copy 메소드를 사용할 수 없습니다.

foocar 사본을 보낼 수있는 간단한 방법이 있습니까?

+0

자동차 자동차는 자바가 아니며 foo 메소드는 유효한 스칼라 메소드가 아닙니다 (컴파일하지 않습니다). 왜냐하면 여러분이 val에 대한 재 할당을하고 있기 때문입니다 ... – Simon

+0

죄송합니다. 메소드 서명을 수정했습니다. 이제는 괜찮을 것입니다. – karoma

+0

아니요, 여전히 val에 대한 재 할당이 있습니다 (car가 메소드의 인수로 val이지만 car.name =). – Simon

답변

0

회원의 의 자동차 클래스는 public이며 변경할 수 있습니다. 또한 foo 함수의 정의에서 서명은 foo : (car : Car) Unit입니다.이 함수는 순수한 함수가 아니라는 것을 의미 할 수 있습니다.이 경우 매개 변수를 수정하는 부작용 함수 또는 프로 시저입니다. 명시 적으로 매개 변수의 사본을 작성하고 사본을 변경해야합니다.

관련 문제