2013-10-31 50 views
2

我嘗試編寫示例代碼來結合akka和actor。但編譯代碼時我收到了錯誤信息。代碼非常簡單,如下所示。
那麼,我錯了什麼?Akka型不匹配; [error] found:Unit [error] required:scala.sys.process.ProcessLogger

[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(_ => {}) 
    } 
    } 

} 

回答

5

它解釋execute(cmd.toString)作爲參數!,因爲新行不一定結束語句。爲了解決這個問題,請不要使用後綴語法,因爲某種原因已棄用。

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

uhhhhh..Got it。我多麼愚蠢...... – hellojinjie