2015-11-27 79 views
0

我想要執行一個在scala中執行的函數。像Java世界中的Functor。在scala線程內部執行傳遞的函數參數

我的JavaScript,我會做它作爲

function g(f, data) { 
    f() 
} 

g(function(){ 
    console.log('I must be printed') 
    }, 1000) 

我在斯卡拉試圖與下面相同的,(但Java線程),它不會工作

object FunctionProgInHamiltonRoad { 

    def g(f: (String) => Unit): String = { 
    val task = new TimerTask { 
     override def run(): Unit = { 
     println("I'm printed in g inside thread hell") 
     f 
     } 
    } 
    new Thread(task).start() 

    println("finishing off g") 
    "printed in g" 
    } 

    def main(args: Array[String]) { 
     g((id : String) => {println("I must be printed in g.")}) 
    } 
} 

輸出

整理掉g 我在g線裏面打印地獄

但是傳遞的函數不會被執行。

回答

0
val task = new TimerTask { 
    override def run(): Unit = { 
    println("I'm printed in g inside thread hell") 
    f("") 
    } 
} 
如果要執行的功能

想:f()

(id : String) => {println("I must be printed in g.")}這個功能,應該需要一個參數exeucte,如:f(parameter)