1

我在 Scala 中试验演员。但我对两件事非常好奇。(1) 有没有办法在不使用另一个actor的情况下将一个actor声明为自身的参数(如下代码所示)?(我见过 Producer/Consumer 示例和许多其他示例,它们声明了一种参与者并将其用作另一种参与者的参数。)此外,(2)main 方法中声明新参与者的语句,但使用“_:演员”……这是什么意思?它编译(我没想到)但没有按我的预期工作(我预期)。

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 回答