2016-12-10 1 views
0

저는 스칼라 배우가 처음이므로 코드가 컴파일되지 않는 이유가 없습니다. 분명히 '?' 회원이 아닌 경우 이미 akka.actors.patern._을 가져 왔지만 아직 작동하지 않습니다. 누구나이 어두운 물건을 좀 더 분명하게 해줄 수 있습니까? 감사합니다.스칼라, 라이브러리 akka.actor

import akka.actor.{Actor, ActorRef} 
import akka.pattern._ 

class Registry extends Actor { 
    import Registry._ 
    var registry:Map[String, Any] = Map() 
    def receive = { 
    case Lookup(name) => sender ! registry.get(name) 
    } 
} 

object Registry { 
    import akka.actor.{ActorSystem, Props} 
    case class Lookup(name: String) 
    // create dedicated actor infrastructure 
    val system = ActorSystem("myActorInfrastructure") 
    // create actor with a name and register it with the infrastructure 
    def apply(name: String) = system.actorOf(Props(new Registry()), name) 
} 

class Tweeter(val name: String, val regist:Registry, var followers:List[ActorRef]=List()) extends Actor{ 
    import Tweeter._ 
    def receive = { 
     case Follow(user) => { 
     //Here is the error 
     (regist!? Lookup(name)) match{ 
     case Some(a:ActorRef) => a ! AddFollower(sender) 
     } 
     } 
     case AddFollower(follower) => followers = follower::followers 
    } 
} 

object Tweeter { 
    import akka.actor.{ActorSystem, Props} 
    case class Follow(user: String) 
    case class AddFollower(follower: ActorRef) 
    def apply(name: String, annuaire:Registry) = Registry.system.actorOf(Props(new Tweeter(name,annuaire))) 
} 

답변

1

저는 코드를 컴파일하도록 변경했습니다. 내가 분명히 몇 가지 주석을 추가 : 일반적으로

import akka.actor.{Actor, ActorRef} 
import akka.pattern._ 
import scala.concurrent.duration._ 
import akka.util.Timeout 

import scala.concurrent.ExecutionContext.Implicits.global 

class Registry extends Actor { 
    import Registry._ 
    var registry:Map[String, Any] = Map() 
    def receive = { 
    case Lookup(name) => sender ! registry.get(name) 
    } 
} 

object Registry { 
    import akka.actor.{ActorSystem, Props} 
    case class Lookup(name: String) 
    // create dedicated actor infrastructure 
    val system = ActorSystem("myActorInfrastructure") 
    // create actor with a name and register it with the infrastructure 
    def apply(name: String) = system.actorOf(Props(new Registry()), name) 
} 

class Tweeter(val name: String, regist: ActorRef, var followers:List[ActorRef]=List()) extends Actor { 
    import Tweeter._ 
    import Registry._ 

    implicit val timeout: Timeout = 3 seconds 

    def receive = { 
     case Follow(user) => { 
     // regist must be an actor ref 
     // Ask returns future, you have to map for pattern matching 
     (regist ? Lookup(name)).map { _ 
      match { 
      case Some(a:ActorRef) => a ! AddFollower(sender) 
      } 
     } 
     } 
     case AddFollower(follower) => followers = follower::followers 
    } 
} 

object Tweeter { 

    import akka.actor.{ActorSystem, Props} 
    case class Follow(user: String) 
    case class AddFollower(follower: ActorRef) 

    // Create the actor and use your reference 
    val annuaire = Registry("registry") 
    def apply(name: String, annuaire: ActorRef) = Registry.system.actorOf(Props(new Tweeter(name, annuaire))) 
} 
+0

는 배우의 시스템에 바인딩 된 라이프 사이클을 갖로 배우의 미래를 실행하는 배우 시스템 디스패처를 사용하는 것이 좋습니다 - 그것은 것이다 종료 할 때 배우 시스템 않습니다. – johanandren

관련 문제