Mencoba menulis alternatif Hello World menggunakan Scala dan Akka

Saya memiliki sedikit pengalaman sebelumnya dengan aktor Scala yang sudah tidak digunakan lagi, baru-baru ini saya mulai mempelajari aktor Akka, tampaknya mereka sangat berbeda.

Saya menyelesaikan tutorial ini http://doc.akka.io/docs/akka/2.2.0/scala/hello-world.html

Selanjutnya, saya mencoba menulis alternatif Hello World, menggunakan paradigma yang mirip dengan aktor Scala yang sudah tidak digunakan lagi. Namun saya mengalami beberapa kesulitan (lihat komentar di baris):

class Echo extends Actor {
  override def receive = {
    case a: Any => println(a)
    case "end" => context.stop(self)
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val echo = new Echo()

    // Where is explicit Actor.start() ?

    // "! is not a member", but Akka's official Hello World used ! to send message
    echo ! "Hello"
    echo ! "end"
  }
}

person Community    schedule 08.08.2013    source sumber


Jawaban (1)


Ada beberapa hal yang salah dengan kodenya.

1) Anda tidak dapat membuat aktor hanya dengan membuat instance kelasnya. Anda perlu mendapatkan ActorRef menggunakan actorOf. Untuk melakukan ini, Anda perlu memulai ActorSystem yang akan mengelola pembuatan Actors.

def main(args: Array[String]): Unit = {
  val system = ActorSystem("mySystem")
  val echo = system.actorOf(Props[Echo], "myactor2")
  echo ! "Hello"
  echo ! "end"
}

2) Metode penerimaan Anda juga salah. Pola tipe Any akan cocok dengan semuanya termasuk "end". Cobalah sesuatu seperti ini:

   override def receive = {
    case "end" => context.stop(self)
    case a:String => println(a)
  }

Di sini sebuah pesan dicetak hanya jika bukan "end" dalam hal ini pesan tersebut tidak cocok dengan huruf pertama dan jatuh ke huruf kedua.

person Harshal Pandya    schedule 08.08.2013