最小限の作業例 (Scala 2.9.2):
object Main extends App {
class A {
var a=0
}
val b = Array.fill(2)(new A)
b(1).a = 9
println(b(0).a) //prints 0
println(b(1).a) //prints 9
val a = new A
val c = Array.fill(2)(a)
c(1).a = 9
println(c(0).a) //prints 9
println(c(1).a) //prints 9
}
関連する質問は、「インポートされたJavaクラスと同じですか?」です。関数内の配列に引数として渡されたインスタンスのコピーを入力する必要がある場合、どのように回避できますか? [同一のコピーに関しては、簡単な複製ライブラリをチェックする価値がありました。
回答に基づいて、関数呼び出しに回避策を追加するだけです。
class A {
var a=0
}
def f(a: => A) { // "=>" added
val b = Array.fill(2)(a)
b(1).a=9
println(b(0).a) //prints 0
println(b(1).a) //prints 9
}
f(new A)
もう 1 つの方法は、値ではなく関数を宣言することですdef a = new A
。
object Main extends App {
class A {
var a=0
}
val b = Array.fill(2)(new A)
b(1).a = 9
println(b(0).a) //prints 0
println(b(1).a) //prints 9
def a = new A
val c = Array.fill(2)(a)
c(1).a = 9
println(c(0).a) //prints 0
println(c(1).a) //prints 9
}