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

Jan*_*cki 3 refactoring program-entry-point scala

在几个Scala对象中,我定义了一个调用runTests的main方法,runTests是Test中的一个抽象方法.有没有办法将main方法分解到一个公共位置(Trait或其他解决方案),这样我仍然可以通过键控在Eclipse中运行测试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 {
  ...
Run Code Online (Sandbox Code Playgroud)

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

trait Test {

  def runTests: Unit
  ...
Run Code Online (Sandbox Code Playgroud)

Lui*_*hys 8

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

trait Main {
  self: Test => 
  def main(args: Array[String]) {
    runTests
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你只需将它混合在你的Test特性之后:

object BoardModelTest extends Test with TestUtils with Main {
  def runTests {}
}
Run Code Online (Sandbox Code Playgroud)