2017-09-07 6 views
0

Scala replのメソッドをロードした後で、ケースクラスのインスタンスを作成する際に問題があります。replを使用してオブジェクトに定義されたケースクラスのインスタンスを作成する方法

ここにコードがあります。

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

出力:

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) 

が、私は、オブジェクトdefinitonを削除し、同じように、コード内のメソッドを保持している場合は問題ありません。

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) 

が出力:

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) 

誰かが最初のケースで問題を解決する方法を提案できれば、本当に役に立ちます。

答えて

1

問題を解決する最初の方法は、としてGame.Playerを使用してPlayerケースクラスにアクセスしています。

第2の方法は、import Game._またはimport Game.Playerを使用してクラスをインポートしてから、val bob = Player("Bob",8)以前のコードを実行することです。

0

Gameの内部クラスであるため、最初の例ではPlayerの代わりにGame.Playerを使用する必要があります。
val bob = Game.Player("Bob",8)

関連する問題