Akka中的消息类:将数组/缓冲区作为消息发送

时间:2015-11-04 23:57:23

标签: scala akka

我最近开始使用Scala学习Akka框架。我知道如果我们想要将变量作为消息的一部分发送,我们可以使用如下所示的消息类:

case class Work(start: Int, nrOfElements: Int) extends PiMessage

如何将数组作为此类消息的一部分发送?例如。下面的行不起作用。

case class WorkSend(buff: Array[Int],Dim : Int)

修改

我为以下代码获得了一个超出范围的异常:

case class WorkSend(buff: Array[Int], Dim : Int)

在主人:

val buff = Array[Int](10)
     for (i <- 0 to Dim - 1) //Dim is 10
        buff(i) = matrixA(0)(i)
     worker ! WorkSend(buff)

在工人处:

def receive = {
      case WorkSend(buff) =>

        for (i <- 0 to 9)
        println("Item received: " + buff(i))
        println("Work Done")
        sender ! WorkDone

    }

1 个答案:

答案 0 :(得分:2)

为什么不呢?

import akka.actor._


case class Start(buf: Array[String]) {
  override def toString = buf.mkString("->")
}

object Local extends App {

  implicit val system = ActorSystem("LocalSystem")
  val localActor = system.actorOf(Props[LocalActor], name = "LocalActor")  
  localActor ! Start(Array("A", "B", "C"))                                                          
}

class LocalActor extends Actor {
  def receive = {
    case s: Start =>
      println("LocalActor got: " + s)
  }
}
  

LocalActor得到:A-&gt; B-&gt; C

-

问题略有不同。 如何从矩阵(数组数组到数组)复制 答:您不需要创建任何中间缓冲区。只需使用矩阵作为向量并将其传递给actor。

scala> val m = Array(Array(1,2), Array(3,4))
m: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> m(1)
res38: Array[Int] = Array(3, 4)

WorkSend(m(1))