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?"

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top