निम्न कोड स्कैला 2.8 में ठीक काम करता है लेकिन 2.9.0.1 (आरईपीएल में कॉपी और पेस्ट) में नहीं। यह 2.9.0.1 में अपवाद फेंक देगा।क्या यह स्कैला में एक बग है 2.9.0.1 अभिनेता लाइब्रेरी
import scala.actors.Actor
import scala.actors.TIMEOUT
object A2 extends Actor {
def act = {
loop {
react {
case "hello" =>
val s = sender
reactWithin(2000){
case i:Int => s ! "hello"
case TIMEOUT => s ! "TIMEOUT"
}
case _ =>
}
}
}
}
object A1 extends Actor {
def act = {
loop {
react {
case m:String => println (A2 !? (1000, m))
case _ =>
}
}
}
}
A1.start
A2.start
A1 ! "hi"
A1 ! "hello"
अपवाद तुरंत फेंक दिया नहीं है, तो A1 ! "hi"
या A1 ! "hello"
कई बार ऐसा करना जारी रखें।
क्या यह स्कैला 2.9.0.1 में कोई बग है, या कोड के साथ कुछ गलत है?
[संपादित करें] वास्तविक अपवाद को जोड़ने के लिए भूल गए।
scala> [email protected]: caught java.lang.RuntimeException: unhandled timeout
java.lang.RuntimeException: unhandled timeout
at scala.sys.package$.error(package.scala:27)
at scala.actors.Actor$class.receiveWithin(Actor.scala:606)
at $line4.$read$$iw$$iw$A1$.receiveWithin(<console>:10)
at scala.actors.Channel.receiveWithin(Channel.scala:71)
at scala.actors.ActorCanReply$class.$bang$qmark(ActorCanReply.scala:32)
at $line3.$read$$iw$$iw$A2$.$bang$qmark(<console>:9)
at $line4.$read$$iw$$iw$A1$$anonfun$act$1$$anonfun$apply$1.apply(<console>:15)
at $line4.$read$$iw$$iw$A1$$anonfun$act$1$$anonfun$apply$1.apply(<console>:13)
at scala.actors.ReactorTask.run(ReactorTask.scala:31)
at scala.actors.Reactor$class.resumeReceiver(Reactor.scala:129)
at $line4.$read$$iw$$iw$A1$.scala$actors$ReplyReactor$$super$resumeReceiver(<console>:10)
at scala.actors.ReplyReactor$class.resumeReceiver(ReplyReactor.scala:68)
at $line4.$read$$iw$$iw$A1$.resumeReceiver(<console>:10)
at scala.actors.Actor$class.searchMailbox(Actor.scala:500)
at $line4.$read$$iw$$iw$A1$.searchMailbox(<console>:10)
at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(Reactor.scala:117)
at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114)
at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114)
at scala.actors.ReactorTask.run(ReactorTask.scala:33)
at scala.concurrent.forkjoin.ForkJoinPool$AdaptedRunnable.exec(ForkJoinPool.java:611)
at scala.concurrent.forkjoin.ForkJoinTask.quietlyExec(ForkJoinTask.java:422)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.mainLoop(ForkJoinWorkerThread.java:340)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:325)
EDIT2: आरईपीएल
package scalaapplication5
import scala.actors.Actor._
import scala.actors.Actor
import scala.actors.TIMEOUT
object Main {
A1.start
A2.start
def main(args: Array[String]): Unit = {
while (true){
A1 ! "hi"
A1 ! "hello"
Thread.sleep(1000)
}
}
}
object A2 extends Actor {
def act = loop {
react {
case "hello" =>
val s = sender
reactWithin(2000){
case i:Int => s ! "hello"
case TIMEOUT => s ! "TIMEOUT"
}
case _ =>
}
}
}
object A1 extends Actor {
def act = {
loop {
react {
case m:String => println (A2 !? (1000, m))
case _ =>
}
}
}
}
"क्या यह स्कैला 2.9.0.1 में एक बग है, या कोड के साथ कुछ गलत है?" - मैं स्कैला और एस्परांतो के बीच अंतर को दूर नहीं कर सकता, लेकिन मुझे पता है कि उस प्रश्न का उत्तर लगभग हमेशा "यह आपका कोड है" :-) – paxdiablo
क्या आपने स्कैला 2.8 के साथ प्रयास किया था, और देखें कि कोई अपवाद फेंक दिया गया है, लेकिन है 2.9.x – Jus12
में फेंक दिया गया मेरे लिए काम करता है (2.9.0 में) – IttayD