2011-06-09 10 views
6

Aşağıdaki kod Scala 2.8'de düzgün çalışıyor ancak 2.9.0.1 'da (REPL içinde kopyalayıp yapıştırın). Bu 2.9.0.1'de bir istisna atar. istisna hemen atılır değilse Scala'da bir hata bu mu? 2.9.0.1 aktör kitaplığı

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" veya A1 ! "hello" birkaç kez yapmaya devam.

Scala 2.9.0.1'de bir hata mı, yoksa kodla ilgili bir sorun mu var?

[EDIT] Atılan gerçek istisnayı eklemeyi unutmayın.

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: Bağımsız programı Çoğaltma

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

"Scala 2.9.0.1'deki bir hata mı, yoksa kodla ilgili bir sorun mu var?" - Scala ve Esperanto arasındaki farkı anlayamıyorum, ama bu sorunun cevabının neredeyse değişmez olduğunu biliyorum "bu senin kodun" :-) – paxdiablo

+0

Scala 2.8 ile denedin mi ve hiçbir istisnanın atılmadığını gördün mü atıldı 2.9.x – Jus12

+0

Benim için çalışıyor (2.9.0) – IttayD

cevap

3

olmadan bu görünmüyor Aktör çerçevesinde bir hata olmuş. Hiç RuntimeException almamalısın gibi görünüyor. Ayrıntılar için See the Scala Bug Tracker. 7 Temmuz 2011'de düzeltildi ve muhtemelen serbest bırakılması bekleniyor.

İlgili konular