私はScalaと呼ばれるこの派手な言語に不慣れです。
私はC++で十分な(おそらく)プログラミングの経験があります。プログラミング演習として、Scalaのアクターモデルを使用して配列の要素を追加しようとしていました。私はworkerActorという名前のクラスを作成します。私のメインメソッドでは、このクラスのオブジェクトを作成してから、このオブジェクト(ScalaのActorクラスからクラスを拡張するときのアクター)にメッセージを送信しようとします。アクターに文字列を渡すと、actメソッド内のコードが実行され、ロジックが正しいケースになり、誰もが満足します。ただし、サンプルのようなオブジェクトにタプルを渡そうとすると!(2,4、arr)
2と4は、アクターに計算を実行させたい配列内のインデックスであり、arrは、渡したい配列です。エラーが表示されます。配列と配列のインデックスをアクターに渡すにはどうすればよいですか。Scalaはタプルをアクターに渡すことを許可していますか?
興味深い観察として、act()メソッドに2番目のケースがあると、コンパイルエラーが発生することに気付きました。Eclipseは到達不能コードを表示します。receiveメソッドで2番目のケースを使用できない理由が何であるかがわかります。
case object add
case object trial
import scala.actors._
import Actor._
class workerActor(arr: Array[Int]) extends Actor{
def addarr(a: Int, b: Int): Int = {
var sum = 0
for (i <- a to b)
sum += arr(i)
println("Sum :",a,b,sum)
sum
}
def act(){
receive {
case trial => println("Received trial")
//case trial => println("Received add") //uncommenting this line does not compile the program
}
}
}
object hello {
def main(args: Array[String]): Unit = {
println("Hello World")
val arr = Array(1,2,3,4,5,7,13,4,6,6,23);
val sample = new workerActor(arr)
val s = sample.addarr(2, 4,arr)
sample ! (2,4)
sample ! "try"
sample ! add
sample.start
sample ! trial
}
}
タプルの受け渡しに関する問題ではなく、これは、受信時に複数のケースがあるという奇妙な問題(おそらく構文)のように見えます。