作爲練習,我嘗試創建一個隱式轉換,它將接受函數並生成Runnable
。這樣,您可以調用接受Runnable
對象的Java方法,並像封閉一樣使用它們。隱式轉換爲Runnable?
的隱式轉換是很容易的:
implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }
但是我不知道該怎麼稱呼它。你如何傳遞一個返回Unit的無參數函數,而不需要一次性評估它?例如,我想要以下內容打印「12」,但是打印「21」,因爲print("2")
一次被評估。
var savedFun : Runnable = null
def save(r : Runnable) = { savedFun = r }
save(print("2"))
print("1")
savedFun.run()
我如何告訴編譯器把print("2")
的功能,不是身體立刻進行評估?一些可能性我想,如
save(() => print("2"))
或
save(=> print("2"))
是不合法的語法。
您的意思是*「調用接受Runna的java方法將功能塞進並傳遞給它們就像關閉「*?因爲接受其他函數的方法不被稱爲閉包;他們接受的功能被稱爲(有時)閉包。 – 2014-03-31 02:38:35