как новый объект будет создаваться каждый раз, что не то, что вы после. Я думаю, что должен быть лучший шаблон проектирования, чем передача актеров, на которые ссылаются, в конструкторе.
я есть сценарий, где у меня есть некоторые объекты, которые должны брать ссылки друг от друга. Единственный способ получить это для компиляции - использоватьленивый
class A(b:B)
class B(a:A)
lazy val a:A = new A(b)
lazy val b:B = new B(a)
Я могу сделать то же самое, используя некоторые актеры, и заставить его компилировать также
abstract class Message
case class Message1 extends Message
case class Message2 extends Message
class Actor1(otherActor:Actor) extends Actor {
def act() {
loop {
react {
case Message1 =>
println("received message1")
otherActor ! Message2
case _ =>
}
}
}
}
class Actor2(otherActor:Actor) extends Actor {
def act() {
loop {
react {
case Message2 =>
println("received message2")
otherActor ! Message1
case _ =>
}
}
}
}
lazy val actor1:Actor = new Actor1(actor2)
lazy val actor2:Actor = new Actor2(actor1)
Однако, когда я добавляю следующее:
actor1.start
actor2.start
actor1 ! Message1
Я получаю следующую ошибку:
Исключение в потоке "main" java.lang.NoClassDefFoundError: com / fictitiousCompany / stackOverflowQuestion / Test. Вызвано: java.lang.ClassNotFoundException: com.fictitiousCompany.stackOverflowQuestion.Test at java.net.URLCl2 . AppClassLoader.loadClass (Launcher.java:301) в java.lang.ClassLoader.loadClass (ClassLoader.java:248)
Я использую плагин Scala Eclipse 2.8.1.