กำลังพยายามเขียน Hello World ทางเลือกโดยใช้ Scala และ Akka

ฉันมีประสบการณ์เพียงเล็กน้อยกับนักแสดงสกาล่าที่เลิกใช้แล้ว เมื่อเร็ว ๆ นี้ฉันเริ่มเรียนรู้นักแสดงอัคก้า พวกเขาดูเหมือนจะแตกต่างออกไปมาก

ฉันจบบทช่วยสอนนี้แล้ว http://doc.akka.io/docs/akka/2.2.0/scala/hello-world.html

ต่อไป ฉันกำลังพยายามเขียน Hello World อีกทางเลือกหนึ่ง โดยใช้กระบวนทัศน์ที่คล้ายกับนักแสดง Scala ที่เลิกใช้แล้ว แต่ฉันมีปัญหาบางอย่าง (ดูความคิดเห็นในบรรทัด):

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 แหล่งที่มา


คำตอบ (1)


มีบางสิ่งผิดปกติกับรหัส

1) คุณไม่สามารถสร้างนักแสดงโดยเพียงแค่สร้างอินสแตนซ์ของชั้นเรียนได้ คุณต้องได้รับ ActorRef โดยใช้ ActorOf ในการดำเนินการนี้ คุณจะต้องเริ่มต้นระบบ Actors ที่จะจัดการการสร้าง Actors

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

2) วิธีการรับของคุณก็ผิดเช่นกัน รูปแบบประเภท Any จะตรงกับทุกอย่างรวมถึง "end" ลองสิ่งนี้:

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

ที่นี่ข้อความจะถูกพิมพ์เฉพาะในกรณีที่ไม่ใช่ "end" ซึ่งในกรณีนี้ข้อความจะไม่ตรงกับกรณีแรกและตกไปอยู่ที่กรณีที่สอง

person Harshal Pandya    schedule 08.08.2013