3

akkaとactorを組み合わせるサンプルコードを書いてみました。しかし、コードをコンパイルするとエラーメッセージが表示されました。
以下に示すように、コードは非常に単純です。
それで、私は何を間違えたのですか?

[error] /home/qos/workspaces/actors/actors.scala:20: type mismatch;
[error]  found   : Unit
[error]  required: scala.sys.process.ProcessLogger
[error]         execute(cmd)
[error]                ^
[error] one error found
[error] (compile:compile) Compilation failed

コードは

import scala.sys.process._ 
import akka.actor._ 

object TryActor { 

  def main(args: Array[String]) { 
    val akkaSystem = ActorSystem("akkaSystem") 
    val worker = akkaSystem.actorOf(Props[Worker], name = "work0") 
    worker ! Command("ls") 
  } 

  case class Command(cmd: String) 

  class Worker extends Actor { 

    def receive = { 
      case Command(cmd) => { 
        println(cmd) 
        "echo recieve message from someone" ! 
        execute(cmd.toString) 
      } 
    } 

    def execute(cmd: String) { 
      val process = Process(cmd.toString) 
      process ! ProcessLogger(_ => {}) 
    } 
  } 

}
4

1 に答える 1

6

改行は必ずしもステートメントを終了するとは限らないため、execute(cmd.toString)への引数として解釈しています。!これを修正するには、後置構文を使用しないでください。これは、理由により廃止されています。

def receive = { 
  case Command(cmd) => { 
    println(cmd) 
    "echo recieve message from someone".! 
    execute(cmd.toString) 
  } 
}
于 2013-10-31T04:28:18.987 に答える