Scala Actor в режиме сценария - PullRequest
1 голос
/ 02 декабря 2010

Я пытаюсь пройти 9 главу по программированию в Scala, но обнаружил, что пример кода Actor не может работать в режиме сценария.

Код прост:

// 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

Но когда я запускаю scala TestActor.scala, ничего не происходит, программа завершает работу до того, как класс Redford напечатает что-либо.

Но если я использую следующий код для компиляции и запуска, все работает нормально, оно печатает сообщение, как и ожидалось.

// 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
  } 
} 

Кажется, что когда программа запускается в режиме сценария, она завершает работу, прежде чем актер что-то делает.

Почему это происходит?И как я могу заставить эту программу не завершать работу до того, как Actor.act() будет выполнен, когда программа работает в режиме сценария?

Обновление:

Я использую Scala 2.8.1.final

1 Ответ

0 голосов
/ 02 декабря 2010

Проверено на 2.8.1.final.Странная вещь.Первый раз, когда я запустил его, произошел сбой:

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)

Во второй раз он прошел успешно:

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