gpt4 book ai didi

java - Scala actor 作为参数传递给其他 actor

转载 作者:行者123 更新时间:2023-11-29 06:00:02 25 4
gpt4 key购买 nike

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

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)
}
}

最佳答案

(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"

但这并没有多大意义,因为您总是在自身内部引用 actor ;-)。在这种情况下,它就像一个无限循环。

(2) 非常简单,您创建一个部分应用的函数:

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

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

如果您将它存储到一个变量中,然后使用 Actor 的实际实例调用它,您将获得 Actor1 类的一个实例。

关于java - Scala actor 作为参数传递给其他 actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com