我正在试图弄清楚如何在Scala中使用Akka。我做对了吗,我需要做的不是这个:
class Class1 {
def someMethod1 = {
//.... some operations....
"someStringData"
}
def someMethod2(param1: Int, param2: Double, param3: BigInt) = {
//.... some operations....
new someClass
}
}
//.............................
object Application extends App {
val c = new Class1
val stringData = c.someMethod1
val someClass = c.someMethod2
}
我必须这样做:
case object SomeMethod
case class SomeClass(a: Int, b: Double, c: BigInt)
case class SomeReturnClass(d: Boolean)
class Class1 extends Actor{
def receive = {
case SomeMethod => {
//.... some operation....
sender ! "someStringData"
}
case SomeClass(a, b, c) => {
//...some operations....
val result: Boolean = ..... // some operations....
sender ! new SomeReturnClass(result)
}
}
}
//.............................
object Application extends App {
val system = ActorSystem("HelloSystem")
val helloActor = system.actorOf(Props[Class1], name = "helloactor")
val stringData: String = helloActor ! someMethod1
val someClass: SomeReturnClass = helloActor ! someMethod2
}
答案 0 :(得分:3)
你已经掌握了基本的想法,唯一的错误在于你如何尝试获得演员的答案:为此请看看ask pattern。从某种意义上说,演员就像“活跃的对象”,但不是每个对象都应该被翻译成演员;在实现actor时使用普通对象组合并不罕见。