Ho visto questo utilizzo dell'esempio Function.tupled in un altro answer: Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
.Sintassi function.tupled e segnaposto
Funziona:
scala> Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
<console>:5: warning: method tupled in object Function is deprecated:
Use `f.tuple` instead
Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
^
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3, 2 -> 3)
Sembra che posso fare a meno se non voglio usare la sintassi segnaposto.
scala> Map(1 -> "one", 2 -> "two") map (x => x._1 -> x._2.length)
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3, 2 -> 3)
L'uso diretto della sintassi segnaposto non funziona:
scala> Map(1 -> "one", 2 -> "two") map (_._1 -> _._2.length)
<console>:5: error: wrong number of parameters; expected = 1
Map(1 -> "one", 2 -> "two") map (_._1 -> _._2.length)
lavoro Come funziona Function.tupled? Sembra che stia succedendo molto nello Function.tupled(_ -> _.length)
. Inoltre come dovrei usarlo per non ottenere l'avviso di deprecazione?
@huynhjl La deprecazione di Function.tupled è il risultato di una comprensione che una funzione deve sapere come creare una tupla senza aiuto. Tuttavia, questo in realtà non funziona bene con l'inferenza di tipo. Spero davvero che non rimuoveranno Function.tupled senza rendere il tipo inferencer abbastanza intelligente da aggirare questo problema. –
L'ho sottovalutato per ora. – extempore