2017-09-07 2 views
0

J'ai un problème lors de la création de l'instance de la classe case après le chargement des méthodes dans Scala repl.comment utiliser repl pour créer une instance d'une classe case définie dans l'objet

Voici le code.

object Game { 
    def main(args: Array[String]) { 
     val player1 = new Player("monu", 344) 
     val player2 = new Player("pankaj", 78) 
     declareWinner(player1, player2) 
    } 

    def printWinner(p: Player): Unit = 
     println(p.name + " is the winner!") 

    def declareWinner(p1: Player, p2: Player): Unit = 
     if (p1.score > p2.score) printWinner(p1) 
     else printWinner(p2) 

case class Player(name: String, score: Int) 
} 

Sortie:

scala> :paste Game.scala 
Pasting file Game.scala... 
defined object Game 

scala> val bob = Player("Bob",8) 
<console>:7: error: not found: value Player 
     val bob = Player("Bob",8) 

mais il n'y a pas de problème si je supprimer le definiton objet et juste garder les méthodes dans le code comme:

def main(args: Array[String]) { 
     val player1 = new Player("monu", 344) 
     val player2 = new Player("pankaj", 78) 
     declareWinner(player1, player2) 
    } 

    def printWinner(p: Player): Unit = 
     println(p.name + " is the winner!") 

    def declareWinner(p1: Player, p2: Player): Unit = 
     if (p1.score > p2.score) printWinner(p1) 
     else printWinner(p2) 

case class Player(name: String, score: Int) 

Sortie:

scala> :paste Game.scala 
Pasting file Game.scala... 
main: (args: Array[String])Unit 
printWinner: (p: Player)Unit 
declareWinner: (p1: Player, p2: Player)Unit 
defined class Player 

scala> val bob = Player("Bob",8) 
bob: Player = Player(Bob,8) 

Il sera vraiment utile si quelqu'un peut suggérer une méthode pour résoudre le problème avec le premier cas.

Répondre

1

La première façon de résoudre le problème est accès à la classe Player de cas en utilisant Game.Player comme:
val bob = Game.Player("Bob",8).

La deuxième méthode consiste à importer la classe en premier, en utilisant import Game._ ou import Game.Player, puis en exécutant votre code tel qu'il était avant val bob = Player("Bob",8).

0

Dans le premier exemple, vous devez utiliser Game.Player au lieu de seulement Player, puisqu'il s'agit de la classe interne Game.