我正在通過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中下劃線的無數含義的線程,雖然我確定那些線程必須提及這種類型的用例,但我一定錯過了它。
我正在通過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中下劃線的無數含義的線程,雖然我確定那些線程必須提及這種類型的用例,但我一定錯過了它。
這裏的下劃線是函數的簡寫。編譯器是足夠聰明的推斷,基於方法簽名的返回類型,這是什麼意思是:
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)
您可能希望有一個看看this answer。 _ map f
爲syntactic sugar爲x => x map f
,下劃線爲匿名函數參數的佔位符。
謝謝。我會贊成,但我的聲譽太低。我真的也需要你的回答(以及你發佈的鏈接),這個想法是_表示匿名函數中的位置參數完全沉入其中。 – liminalisht 2015-02-06 22:29:08