如何将Scala对象的主要方法分解为共享位置?

时间:2012-04-06 16:32:30

标签: scala refactoring main

在几个Scala对象中,我定义了一个调用runTests的main方法,这是Test中的一个抽象方法。有没有办法让main方法被分解到一个公共位置(Trait或其他解决方案),这样我仍然可以通过键入 ctrl - F11

这就是我目前所拥有的,

https://github.com/janekdb/stair-chess/blob/master/src/chess/model/BoardModelTest.scala

object BoardModelTest extends Test with TestUtils {

  def main(args: Array[String]) {
    runTests
  }

  def runTests {
  ...

https://github.com/janekdb/stair-chess/blob/master/src/test/Test.scala

trait Test {

  def runTests: Unit
  ...

1 个答案:

答案 0 :(得分:8)

我在这台电脑上没有Eclipse,所以我无法测试它是否适用于Ctrl + F11,但我认为你想要一个自我类型:

trait Main {
  self: Test => 
  def main(args: Array[String]) {
    runTests
  }
}

然后,您只需在Test特征后将其混合:

object BoardModelTest extends Test with TestUtils with Main {
  def runTests {}
}