2013-03-30 3 views
0

I ont cette classeExtension, constructeur super et méthodes statiques

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} 
} 

et je veux étendre faire quelque chose comme ça

class EasyTester() extends Tester(getRandomRobot()){} 

Il est évident que cela ne fonctionne pas.

Probablement le problème est trivial mais je viens d'approcher récemment la partie OO de Scala, donc je n'ai jamais travaillé avec ce genre de choses.

Répondre

1

Si getRandomRobot appartient à Tester logiquement, mais ne dépend pas de l'état d'un testeur, vous pouvez le transformer en une méthode sur un objet companion:

object Tester { 
    def getRandomRobot(eng: RobocodeEngine): Array[RobotSpecification] = { ... } 
} 

Un moyen serait juste pour passer sparringPartners dans le constructeur de EasyTester:

class EasyTester(sparringPartners: Array[RobotSpecification]) extends Tester(sparringPartners) { ... } 

import Tester._ 
val eng = ... 
val easyTester = new EasyTester(getRandomRobot(eng)) 

Pour rendre l'instanciation plus simple que cela, EasyTester pourrait avoir un objet compagnon avec une méthode apply qui l'instancie:

import Tester._ 
object EasyTester { 
    def apply(implicit eng: RobocodeEngine) = { 
     new EasyTester(getRandomRobot(eng)) 
    } 
} 

implicit val eng: RobocodeEngine = ... 
val easyTester = EasyTester