Java Scala参与者作为参数传递给其他参与者

Java Scala参与者作为参数传递给其他参与者,java,scala,actor,Java,Scala,Actor,我在用Scala的演员做实验。但我对两件事很好奇。(1) 有没有一种方法可以在不使用其他参与者的情况下将参与者声明为自身的参数(如以下代码中所示)?(我见过生产者/消费者示例和许多其他示例,它们声明了一种类型的参与者,并将其用作另一种类型的参数。)此外,(2)main方法中声明新参与者的语句,但使用“u:actor”。。。这是什么意思?它可以编译(这是我没有预料到的),但不能像我预期的那样工作(这是我预料到的) (一) 是的,这是可能的: class Foo(actor: => Actor

我在用Scala的演员做实验。但我对两件事很好奇。(1) 有没有一种方法可以在不使用其他参与者的情况下将参与者声明为自身的参数(如以下代码中所示)?(我见过生产者/消费者示例和许多其他示例,它们声明了一种类型的参与者,并将其用作另一种类型的参数。)此外,(2)main方法中声明新参与者的语句,但使用“u:actor”。。。这是什么意思?它可以编译(这是我没有预料到的),但不能像我预期的那样工作(这是我预料到的)

(一)

是的,这是可能的:

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>
scala>类Foo(actor:actor){
|println(actor.toString)
| }
定义类Foo
scala>new Foo(uz:Actor)
res0:(scala.actors.Actor)=>Foo=
如果您将它存储到一个变量中,然后使用Actor的实际实例调用它,您将得到Actor1类的实例

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

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