2013-07-21 2 views
0

Я собираюсь выяснить, как работать с Аккой в ​​Скале. Разве я получить это право, что, что мне нужно сделать, это вместо этого: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 
} 

ответ

3

У вас есть основная идея права, единственная ошибка в том, вы пытаетесь получить ответ актера: для этого, пожалуйста, взгляните на ask pattern. Актеры в некотором смысле похожи на «активные объекты», но не каждый объект должен быть переведен в актера; нередко использовать композицию простого объекта при реализации актеров.

+0

, но я не буду здесь. –

+0

Что вы имеете в виду? ваш код не компилируется, потому что «!» не возвращает то, что вы предполагаете. –

+0

Вы правы. Тем не менее, я видел эти документы, и именно поэтому я задал вопрос. –

Смежные вопросы