【发布时间】:2012-11-23 21:34:11
【问题描述】:
最小的工作示例(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 类也一样吗?” 如果我需要使用作为参数传递的实例的副本填充函数内部的数组,我该如何解决? [关于相同的副本,我值得检查一下简单的cloning library。
只需根据答案将解决方法添加到函数调用中:
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)
另一种方法是声明一个函数,而不是一个值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
}
【问题讨论】:
标签: class scala new-operator cloning scala-2.9