我有这个班级
class Tester(round: Int, x: Int, y: Int,sparringPartners:Array[RobotSpecification]) {
def this(s:Array[RobotSpecification]) = {
this(5, 800, 600, s)
}
def getRandomRobot(eng: RobocodeEngine): Array[RobotSpecification] = {//blabla}
}
我想扩展做这样的事情
class EasyTester() extends Tester(getRandomRobot()){}
显然它不起作用。
问题可能是微不足道的,但我刚刚接近Scala的OO部分,所以我从未使用过这些东西。
答案 0 :(得分:1)
如果getRandomRobot
在逻辑上属于Tester
,但不依赖于测试人员的状态,则可以将其转换为companion对象上的方法:
object Tester {
def getRandomRobot(eng: RobocodeEngine): Array[RobotSpecification] = { ... }
}
一种方法就是将sparringPartners
传递给EasyTester
的构造函数:
class EasyTester(sparringPartners: Array[RobotSpecification]) extends Tester(sparringPartners) { ... }
import Tester._
val eng = ...
val easyTester = new EasyTester(getRandomRobot(eng))
为了使实例化更简单,EasyTester
可以有一个带有apply
方法的伴随对象来实例化它:
import Tester._
object EasyTester {
def apply(implicit eng: RobocodeEngine) = {
new EasyTester(getRandomRobot(eng))
}
}
implicit val eng: RobocodeEngine = ...
val easyTester = EasyTester