1

私は Scala でアクターを試していました。しかし、私は2つのことについて非常に興味があります。(1) 別のアクターを使用せずに、アクターをそれ自体へのパラメーターとして (次のコードのように) 宣言する方法はありますか? (Producer/Consumer の例や、ある種類のアクターを宣言し、それを別の種類のパラメーターとして使用する他の多くの例を見てきました。) また、(2) メイン メソッドで新しいアクターを宣言するが、 「_:役者」…どういう意味?コンパイルはできますが (期待していませんでした)、意図したとおりに動作しません (期待していました)。

import scala.actors.Actor;
import Actor._;

// Code for declaring methods that actors can send and receive

class Actor1(subact: Actor) extends Actor {
  def act: Unit = {
    println("doing stuff...")
    while (true) {
      // Code here for methods ...
    }
  }
  this.start()
}

object foo {
  def main(args: Array[String]) : Unit = {
    val i = new Actor1(_ : Actor)
  }
}
4

1 に答える 1

3

(1)

はい、可能です:

class Foo(actor: => Actor) extends Actor {
  def act {
    loop {
      react {
        case x: String => actor ! x
      }
    }
  }
}

lazy val foo = new Foo(foo)

foo.start

foo ! "bar"

しかし、それ自体の内部のアクターへの参照が常にあるため、あまり意味がありません ;-)。この場合、それはまさに無限ループのようなものです。

(2) は非常に単純です。部分的に適用された関数を作成します。

scala> class Foo(actor: Actor) {
     | println(actor.toString)
     | }
defined class Foo

scala> new Foo(_: Actor)
res0: (scala.actors.Actor) => Foo = <function1>

これを変数に格納し、後で Actor の実際のインスタンスで呼び出すと、Actor1 クラスのインスタンスが取得されます。

于 2012-05-09T20:53:32.657 に答える