【发布时间】:2020-01-17 13:12:02
【问题描述】:
在 Scala 中有没有办法使用中间早期初始化器?
这是我要编译的内容:
trait A { val valueA: Int = 0 }
trait B {
val valueB: Int
println(valueB)
}
class C extends A with { val valueB = valueA } with B
编辑:回答 Luis 的问题
使用 scalatest,可以使用 trait 构造函数来组织固定装置。我想对一个子夹具进行参数化,并使用超级夹具中的一个字段进行早期初始化。
这是另一个与实际最大规模案例相关的例子:
class Test extends FreeSpec {
trait CommonFixture {
val commonCaseValue: Int = 1
}
abstract trait SpecialCaseFixture {
val specialCaseValue: Int
}
"special case test #1" in new CommonCaseFixture with { val specialCaseValue = commonCaseValue } with SpecialCaseFixture {
// all fixtures fields are accessible here
}
}
【问题讨论】:
-
根据 Scala 语法
EarlyDefs必须在任何其他父类或特征之前。 - scala-lang.org/files/archive/spec/2.13/… -
你能告诉我们你为什么想要这个吗?也许有更好的方法来实现这一点。
标签: scala traits scalatest fixtures