2014-07-23 101 views
0

可能有人請解釋一下這段代碼:困惑這個斯卡拉語法

val ns: Iterator[Int] = (1 to 3).iterator 
ns.map(_ =>() => block) 

其中

block: => Future[T] 

基本上我只是困惑是怎麼回事與_=>和單位()語法。我試圖讀取它的方式是'我們映射一個函數,它返回一個不帶參數的函數,並返回Future [T]遍歷整數列表'。它是否正確?我總是困惑,當我看到多個=>運營商在一排..

+0

我認爲此答案由@Daniel C.索布拉爾因爲直到日期了最好的詮釋:http://stackoverflow.com/questions/4543228/whats-the-difference-between-and-unit/4545703#4545703 –

回答

2

是的,你是正確的。

它的分析是這樣的:

ns.map(_ => (() => block)) 

而且() => ?語法只是定義一個參數的函數:

val f =() => 1 
f() // 1 

所以在ns整數被忽略,而你只是得到的功能迭代器不帶參數並返回期貨:Iterator[() => Future[T]]

+0

那麼,=>操作符右聯合呢? (這是一個運營商?) – jcm

0

我認爲這塊:=>未來[T]也許的方法的簽名。它意味着按名稱。基本上,你可以明白,這僅僅是一個類型的未來[T]這是懶惰的評價,但不是一個函數

val ns: Iterator[Int] = (1 to 3).iterator 
ns.map(_ =>() => block) 

這將返回迭代器[()=>未來的],所以是的,你是對的,這轉變成一種對未來不需要任何東西的功能。這樣做的好處是它不會立即評估Future,它會在您調用時調用。

val result = ns.map(_ =>() => block) 

result.foreach(_())