2015-02-09 15 views

risposta

14

È solo un'istanza di identity function, predefinita per comodità, e forse per impedire alle persone di ridefinirlo da sole un sacco di volte. identity restituisce semplicemente il suo argomento. A volte può essere utile passare a funzioni di ordine superiore. Si potrebbe fare qualcosa del tipo:

scala> def squareIf(test: Boolean) = List(1, 2, 3, 4, 5).map(if (test) x => x * x else identity) 
squareIf: (test: Boolean)List[Int] 

scala> squareIf(true) 
res4: List[Int] = List(1, 4, 9, 16, 25) 

scala> squareIf(false) 
res5: List[Int] = List(1, 2, 3, 4, 5) 

Ho anche visto usato come valore di argomento di default a volte. Ovviamente, puoi semplicemente dire x => x in qualsiasi posto tu possa usare identity, e potresti persino salvare un paio di caratteri, quindi non ti compra molto, ma può essere auto-documentante.

4

Oltre a ciò che acjay ha già menzionato, la funzione Identità è estremamente utile in combinazione con parametri impliciti.

Supponiamo di avere una qualche funzione in questo modo:

implicit def foo[B](b: B)(implicit converter: B => A) = ... 

In questo caso, la funzione di identità sarà utilizzato come convertitore implicita quando alcuni istanza di B <: A viene passato come primo argomento di funzione.

Se non si ha familiarità con le conversioni implicite e come utilizzare i parametri impliciti a catena di loro, leggere questo: http://docs.scala-lang.org/tutorials/FAQ/chaining-implicits.html

+0

fantastico consiglio per il modello di convertitore di dati comune – radke