2010-12-02 18 views
1

J'essaie de passer par le chapitre 9 de la programmation dans Scala, mais j'ai trouvé que l'exemple de code Acteur ne pouvait pas fonctionner en mode script.Scala Acteur en mode script

Le code est simple:

// TestActor.scala 

import scala.actors.Actor 

class Redford extends Actor { 
    def act() { 
    println("A lot of what acting is, is paying attention.") 
    } 
} 

val robert = new Redford 
robert.start 

Mais quand je lance scala TestActor.scala, rien ne se passe, la sortie du programme avant quoi que ce soit d'impression de classe Redford.

Mais si j'utilise le code suivant pour compiler et exécuter, tout fonctionne bien, il imprime le message comme prévu.

// TestActorCompiled.scala 

import scala.actors.Actor 

class Redford extends Actor { 
    def act() { 
    println("A lot of what acting is, is paying attention.") 
    } 
} 

object Main { 
    def main (args: Array[String]) { 
    val robert = new Redford 
    robert.start 
    } 
} 

Il semble que lorsque le programme s'exécute en mode script, il sort avant que l'acteur ne fasse quoi que ce soit.

Pourquoi cela se produit-il? Et comment pourrais-je faire ce programme ne pas sortir avant Actor.act() est fait lorsque le programme fonctionne en mode script?

Mise à jour:

J'utilise Scala 2.8.1.final

+2

Hmmm ... 1er fonctionne très bien à 2.8.0.final –

Répondre

0

Testé sur 2.8.1.final. Chose étrange. La première fois que je le lance a échoué avec:

Could not connect to compilation daemon. 
Exception in thread "main" java.lang.Exception: fsc failure 
     at scala.tools.nsc.CompileSocket.fatal(CompileSocket.scala:50) 
     at scala.tools.nsc.CompileSocket.getPort(CompileSocket.scala:122) 
     at scala.tools.nsc.CompileSocket.getsock$1(CompileSocket.scala:152) 
     at scala.tools.nsc.CompileSocket.getOrCreateSocket(CompileSocket.scala:170) 
     at scala.tools.nsc.ScriptRunner$.compileWithDaemon(ScriptRunner.scala:145) 
     at scala.tools.nsc.ScriptRunner$.compile$1(ScriptRunner.scala:197) 
     at scala.tools.nsc.ScriptRunner$.withCompiledScript(ScriptRunner.scala:225) 
     at scala.tools.nsc.ScriptRunner$.runScript(ScriptRunner.scala:265) 
     at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:91) 
     at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) 

La deuxième fois, il a passé avec succès:

>scala TestActor.scala 
A lot of what acting is, is paying attention.