2015-02-06 73 views
5

我正在通過Runar中的示例和Paul的函數式編程在斯卡拉的書,我已經遇到以下實現提升功能的4.3.2:提升中下劃線的含義[A,B](f:A => B):選項[A] =>選項[B] = _ map f

def lift[A,B](f: A => B): Option[A] => Option[B] = _ map f

我理解功能的目的,但我不明白,因爲實施我不明白下劃線代表什麼。我已經看了許多關於Scala中下劃線的無數含義的線程,雖然我確定那些線程必須提及這種類型的用例,但我一定錯過了它。

回答

12

這裏的下劃線是函數的簡寫。編譯器是足夠聰明的推斷,基於方法簽名的返回類型,這是什麼意思是:

def lift[A,B](f: A => B): Option[A] => Option[B] = (_: Option[A]).map(f) 

這反過來又擴展爲:

def lift[A,B](f: A => B): Option[A] => Option[B] = (o: Option[A]) => o.map(f) 
10

您可能希望有一個看看this answer_ map fsyntactic sugarx => x map f,下劃線爲匿名函數參數的佔位符。

+0

謝謝。我會贊成,但我的聲譽太低。我真的也需要你的回答(以及你發佈的鏈接),這個想法是_表示匿名函數中的位置參數完全沉入其中。 – liminalisht 2015-02-06 22:29:08

相關問題