如何使用可堆叠特征和抽象覆盖来修复线性化

时间:2016-07-07 01:31:29

标签: scala inheritance types mixins self-type

Scala第一次遇到任何真正的线性化问题,我似乎无法解决这个问题。

假设我有一个测试我想要这样做:

class Magical(magicNumber: Int)

class MagicianSpec extends Magical(123) with FlatSpecLike with BeforeAndAfterEach {

  var result = false

  override protected def beforeEach(): Unit = {
    result = true
    super.beforeEach()
  }

  "This" should "do what I want" in {
    assert(result)
  }
}

现在我想创建一个扩展abstract class的{​​{1}},但也混合在Magical中,这样在我的测试中我可以扩展一个类并拥有一堆其他默认行为混合在一起免费。

这是我先试过的:

BeforeAndAfterEach

这不起作用。它必须包含abstract class RandomMagic(seed: Int) extends Magical(seed) with BeforeAndAfterEach { thisSuite: Suite => override protected def runTest(testName: String, args: Args): Status = thisSuite.runTest(testName, args) var result = false override protected def beforeEach(): Unit = { result = true super.beforeEach() } } class LuckSpec extends RandomMagic(1) with FlatSpecLike with BeforeAndAfterEach { "This other one" should "do what I want" in { assert(result) } } abstract修饰符,这意味着它必须是override,这意味着它不能拥有构造函数,因此无法扩展trait。< / p>

这是我尝试将具有混凝土构件的类型插入线性化时所得到的:

Magical

所以现在它至少编译但是测试失败了。

有人可以解释为什么它没有做我认为应该做的事情吗?也有办法让这个工作吗?

0 个答案:

没有答案