2011-06-09 10 views
6

निम्न कोड स्कैला 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 _ => 
     } 
    } 
    } 
} 
+3

"क्या यह स्कैला 2.9.0.1 में एक बग है, या कोड के साथ कुछ गलत है?" - मैं स्कैला और एस्परांतो के बीच अंतर को दूर नहीं कर सकता, लेकिन मुझे पता है कि उस प्रश्न का उत्तर लगभग हमेशा "यह आपका कोड है" :-) – paxdiablo

+0

क्या आपने स्कैला 2.8 के साथ प्रयास किया था, और देखें कि कोई अपवाद फेंक दिया गया है, लेकिन है 2.9.x – Jus12

+0

में फेंक दिया गया मेरे लिए काम करता है (2.9.0 में) – IttayD

उत्तर

3

बिना स्टैंडअलोन कार्यक्रम यह प्रकट होता है अभिनेता ढांचे में एक बग किया गया है। ऐसा लगता है कि आपको कभी भी RuntimeException नहीं मिलना चाहिए। विवरण के लिए See the Scala Bug Tracker। यह 7 जुलाई 2011 को तय किया गया था, और शायद रिलीज का इंतजार कर रहा है।

संबंधित मुद्दे