Scala Lazy Val Pregunta
Tengo un escenario en el que tengo algunos objetos que necesitan tomar referencias el uno del otro. La única forma en que puedo compilar esto es usarperezoso
class A(b:B)
class B(a:A)
lazy val a:A = new A(b)
lazy val b:B = new B(a)
Puedo hacer lo mismo con algunos actores, y hacer que compile también
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)
Sin embargo, cuando agrego lo siguiente:
actor1.start
actor2.start
actor1 ! Message1
Obtuve el siguiente error:
Excepción en el hilo "main" java.lang.NoClassDefFoundError: com / fictitiousCompany / stackOverflowQuestion / Test Causado por: java.lang.ClassNotFoundException: com.fictitiousCompany.stackOverflowQuestion.Test en java.net.URLClassLoader $ 1.run (UR:20lassLoader.ja:20 ) en java.security.AccessController.doPrivileged (Método nativo) en java.net.URLClassLoader.findClass (URLClassLoader.java:190) en java.lang.ClassLoader.loadClass (ClassLoader.java:307) en sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) en java.lang.ClassLoader.loadClass (ClassLoader.java:248)
Estoy usando el complemento Scala Eclipse 2.8.1.