Come limitare una funzione di confine anonima?
-
29-09-2019 - |
Domanda
Ho visto un sottostante Codice:
Map(1 -> "one", 2 -> "two") map _._1
questo ritorno un Iterable [Int], ma se voglio fare nulla con la mappa, come farlo?
Io voglio fare qualcosa di simile al di sotto, ma il sottostante codice non riesco a compilare, lo so perché un'istanza di oggetto non una funzione, ma come creare una funzione per fare x => x
e l'uso segnaposto:
Map(1 -> "one") map (_) // map (Int, String) to (Int, String) by nothing change
// I test some other way, but all can't compile
come fare questo?
AGGIORNAMENTO
Ci scusiamo per confondere appassionati persona. Voglio sapere perché map (_) != map (x => x)
, compilatore trasformare questo codice per (x$1) => Map(1.$minus$greater("one")).map(x$1)
perché non Map('a'.$minus$greater(1)).map((x$1) => x$1)
, e lo fa non ha un modo può utilizzare _
rendere questo codice?
ho usato qui di seguito il codice per aiuto compilatore dedurre il tipo _
:
Map(1 -> "one") map (_:((Int, String))=>(Int, String))
// but it return (((Int, String)) => (Int, String)) => scala.collection.immutable.Map[Int,String] = <function1>
E sembra che il parser non era sicuro dove mettere l'inizio della funzione anonima. Quindi la mia nuova domanda è "Come aiutare il parser per limitare confine di una funzione anonima?"
Soluzione
Non sono sicuro ho capito la domanda, ma identity
è forse quello che stai cercando:
scala> Map(1 -> "one") map (identity)
res66: scala.collection.mutable.Map[Int,java.lang.String] = Map((1,one))
o, fare alcuni trucchi:
scala> def __[A](x: A): A = x
__: [A](x: A)A
scala> Map(1 -> "one") map (__)
res1: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one))
Altri suggerimenti
Ho trovato una risposta da Daniel, funzioni anonime e mappe a Scala , questa risposta mi permetta chiaro come il segnaposto processo di parser in questo caso. grazie per tutto.
Non riesco a vedere alcun valore in quello che stai cercando di fare qui, il modo corretto per mappare una collezione di per sé non è quello di chiamare mappa!
Sbagliato:
Map(1 -> "one") map (_)
A destra:
Map(1 -> "one")
Non è nemmeno utile come un'operazione di copia superficiale, la Scala mappa predefinita è immutabile e non c'è motivo di copiarlo.
Map(1 -> "one") map((x)=>x)