可能有人請解釋一下這段代碼:困惑這個斯卡拉語法
val ns: Iterator[Int] = (1 to 3).iterator
ns.map(_ =>() => block)
其中
block: => Future[T]
基本上我只是困惑是怎麼回事與_
,=>
和單位()
語法。我試圖讀取它的方式是'我們映射一個函數,它返回一個不帶參數的函數,並返回Future [T]遍歷整數列表'。它是否正確?我總是困惑,當我看到多個=>
運營商在一排..
可能有人請解釋一下這段代碼:困惑這個斯卡拉語法
val ns: Iterator[Int] = (1 to 3).iterator
ns.map(_ =>() => block)
其中
block: => Future[T]
基本上我只是困惑是怎麼回事與_
,=>
和單位()
語法。我試圖讀取它的方式是'我們映射一個函數,它返回一個不帶參數的函數,並返回Future [T]遍歷整數列表'。它是否正確?我總是困惑,當我看到多個=>
運營商在一排..
是的,你是正確的。
它的分析是這樣的:
ns.map(_ => (() => block))
而且() => ?
語法只是定義一個參數的函數:
val f =() => 1
f() // 1
所以在ns
整數被忽略,而你只是得到的功能迭代器不帶參數並返回期貨:Iterator[() => Future[T]]
。
那麼,=>操作符右聯合呢? (這是一個運營商?) – jcm
我認爲這塊:=>未來[T]也許的方法的簽名。它意味着按名稱。基本上,你可以明白,這僅僅是一個類型的未來[T]這是懶惰的評價,但不是一個函數
val ns: Iterator[Int] = (1 to 3).iterator
ns.map(_ =>() => block)
這將返回迭代器[()=>未來的],所以是的,你是對的,這轉變成一種對未來不需要任何東西的功能。這樣做的好處是它不會立即評估Future,它會在您調用時調用。
val result = ns.map(_ =>() => block)
result.foreach(_())
我認爲此答案由@Daniel C.索布拉爾因爲直到日期了最好的詮釋:http://stackoverflow.com/questions/4543228/whats-the-difference-between-and-unit/4545703#4545703 –