2015-02-06 24 views
5

Sto lavorando con gli esempi in Runar e Paul Programmazione funzionale a Scala libro, e ho incontrato la seguente implementazione della funzione di sollevamento nella sezione 4.3.2:Significato del trattino basso in ascensore [A, B] (f: A => B): Opzione [A] => Opzione [B] = _ mappa f

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

capisco lo scopo della funzione, ma non capisco perché l'attuazione Non capisco cosa rappresenta la sottolineatura. Ho esaminato molti altri argomenti sulla miriade di significati di sottolineatura in Scala, e mentre sono certo che questi thread devono menzionare questo tipo di caso d'uso, devo averlo perso.

risposta

12

Il trattino di sottolineatura qui è una scorciatoia per una funzione. Il compilatore è abbastanza intelligente per dedurre, in base al tipo di ritorno della firma del metodo, che ciò che si intende è:

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

che a sua volta si espande a:

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

si potrebbe desiderare di avere un guarda this answer. Il _ map f è syntactic sugar per x => x map f, il carattere di sottolineatura è un segnaposto per un argomento di una funzione anonima.

+0

Grazie. Avrei votato in su, ma la mia reputazione è troppo bassa. Avevo davvero bisogno anche della tua risposta (e del link che hai postato) per l'idea che _ rappresenti i parametri posizionali in una funzione anonima in cui affondare completamente. – liminalisht

Problemi correlati