我定义了一个抽象类型的类,如下所示:
abstract class AbsCell2{
type T
val init: T
private var value: T = {
println("Hello "+init);
init
}
def get : T = value
def set(x : T) = { value = x}
}
现在我实例化一个 Int 类型的对象
scala> val cell = new AbsCell2{type T = Int ; val init = 10}
Hello 0
cell: AbsCell2{type T = Int} = $anon$1@969ebb
注意
println
的输出.它接缝变量 init
还没有初始化为10。注意scala的版本是2.9.0-1
最佳答案
我认为您正在寻找 Scala 的 early initializers ,
scala> val cell = new {type T = Int ; val init = 10} with AbsCell2
Hello 10
cell: AbsCell2{val init: Int; type T = Int} = $anon$1@1efa9557
scala> cell.get
res0: cell.T = 10
早期初始化器允许您在类构造函数运行之前分配一个新对象并设置一些特定字段。在这种情况下,由于
value
取决于 init
,我们使用早期初始化语法( new { val init = ... } with AbsCell2
)来首先设置 init
以便类构造函数可以正确初始化 value
.另见这个问题:In Scala, what is an "early initializer"?
关于scala - scala中抽象类型类的初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055618/