Scala:密封的trait对象在case语句中不起作用:Akka actors

Scala:密封的trait对象在case语句中不起作用:Akka actors,scala,traits,companion-object,akka-actor,Scala,Traits,Companion Object,Akka Actor,我一直在努力处理以下与case语句中密封特征对象使用相关的错误。这是我与akka actors相关的代码。我正在使用伴随对象并定义密封特征,如下面的scala文件所示 ActorCreation.scala import akka.actor.Actor import akka.actor.ActorSystem import akka.actor.Props object MusicController{ sealed trait ControllerMsg case object

我一直在努力处理以下与case语句中密封特征对象使用相关的错误。这是我与akka actors相关的代码。我正在使用伴随对象并定义密封特征,如下面的scala文件所示

ActorCreation.scala

import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props

object MusicController{
  sealed trait ControllerMsg
  case object Play extends ControllerMsg
  case object Stop extends ControllerMsg

  }

class MusicController extends Actor{
  def receive ={
   case Play =>
     println("Music Started.....")
   case Stop =>
     println("Music Stopped.....")
 }
}

object MusicPlayer{
  sealed trait PlayMsg
  case object StopMusic extends PlayMsg
  case object StartMusic extends PlayMsg
}

class MusicPlayer extends Actor {
  def receive ={
   case StopMusic =>
     println("I don't Stop Music now.....")
   case StartMusic =>
     val controller = context.actorOf(Props[MusicController],"controller")
     controller ! Play
   case _ =>
     println("Unknown Message")
 }
}

object Creation extends App{

 val system = ActorSystem("creation")

 val player = system.actorOf(Props[MusicPlayer],"player")

 player ! StartMusic
}
这是我在相应类的伴生对象中定义了sealed trait对象之后得到的与之相关的错误堆栈

[info] Updating {file:/C:/Akka%20Actors/chapter02/}chapter02...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] Compiling 1 Scala source to C:\Akka Actors\chapter02\target\scala-2.11\classes...
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:14: not found: value Play
[error]    case Play =>
[error]         ^
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:16: not found: value Stop
[error]    case Stop =>
[error]         ^
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:30: not found: value StopMusic
[error]    case StopMusic =>
[error]         ^
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:32: not found: value StartMusic
[error]    case StartMusic =>
[error]         ^
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:34: not found: value Play
[error]      controller ! Play
[error]                   ^
[error] C:\Akka Actors\chapter02\src\main\scala\ActorCreation.scala:46: not found: value StartMusic
[error]  player ! StartMusic
[error]           ^
[error] 6 errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 10 s, completed Sep 22, 2017 11:12:37 AM
>
以下是build.sbt

name := "akka-actors"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies +=
    "com.typesafe.akka" % "akka-actor_2.11" % "2.4.0"

您只需要将这些对象从伴奏对象导入到演员中,下面是MusicController的一个示例:

object MusicController {
  sealed trait ControllerMsg
  case object Play extends ControllerMsg
  case object Stop extends ControllerMsg

}

class MusicController extends Actor{
  import MusicController._  // <--- Add this

  def receive = {
   case Play =>
     println("Music Started.....")
   case Stop =>
     println("Music Stopped.....")
  }
}

您只需要将这些对象从伴奏对象导入到演员中,下面是MusicController的一个示例:

object MusicController {
  sealed trait ControllerMsg
  case object Play extends ControllerMsg
  case object Stop extends ControllerMsg

}

class MusicController extends Actor{
  import MusicController._  // <--- Add this

  def receive = {
   case Play =>
     println("Music Started.....")
   case Stop =>
     println("Music Stopped.....")
  }
}