He visto este uso del ejemplo Function.tupled en otro answer: Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
.Sí. Sintaxis de función y marcador de posición
Funciona:
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)
Parece que puedo prescindir si no quiero usar la sintaxis marcador de posición.
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)
El uso directo de la sintaxis marcador de posición no funciona:
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)
¿Cómo funciona Function.tupled? Parece que suceden muchas cosas en Function.tupled(_ -> _.length)
. ¿También cómo lo usaría para no recibir la advertencia de desaprobación?
@huynhjl La degradación de Function.tupled es el resultado del entendimiento de que una función debe saber cómo voltearse sin ayuda. Sin embargo, eso realmente no funciona bien con la inferencia de tipo. Espero que no eliminen Function.tupled sin hacer que el tipo inferencer sea lo suficientemente inteligente como para evitar este problema. –
No lo preparé por ahora. – extempore