2016-06-23 7 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メソッドを使用することはできません。

のコピーをfooに送る簡単な方法はありますか?

+0

カーはスカラーではなく、fooメソッドは有効なScalaメソッドではありません(コンパイルは行いません)。 – Simon

+0

メソッドのシグネチャを修正しました。 – karoma

+0

いいえ、依然としてval(car.name =はcarがメソッドの引数としてvalですが)に代入されています。 – Simon

答えて

0

それはあなたのカークラスの名前メンバーがパブリックおよび可変である可能性があります。 また、foo関数の定義から、署名はfoo:(car:Car)Unitであり、純粋な関数ではないことを意味する可能性があります。この場合、パラメータを変更するための副作用関数(またはプロシージャ)です。明示的にパラメータのコピーを作成し、コピーを変更する必要があります。

関連する問題