Question

J'ai vu ci-dessous le code:

Map(1 -> "one", 2 -> "two") map _._1

ce retour un Iterable [Int], mais si je veux ne rien faire sur la carte, comment le faire?

Je veux faire quelque chose comme ci-dessous, mais le code ne peut pas en dessous de compiler, je le sais parce que une instance d'objet non pas une fonction, mais la façon de créer une fonction pour faire de l'espace réservé x => x et utilisation:

Map(1 -> "one") map (_)  // map (Int, String) to (Int, String) by nothing change
// I test some other way, but all can't compile

comment faire?

MISE À JOUR

Désolé pour confondez personne passionnée. Je veux savoir pourquoi map (_) != map (x => x), compilateur transformer ce code pour (x$1) => Map(1.$minus$greater("one")).map(x$1) pourquoi ne pas Map('a'.$minus$greater(1)).map((x$1) => x$1), et il ne dispose d'une façon peut utiliser _ rendre ce code?

J'utilisé ci-dessous le code pour le compilateur d'aide inférées type _:

Map(1 -> "one") map (_:((Int, String))=>(Int, String))
// but it return (((Int, String)) => (Int, String)) => scala.collection.immutable.Map[Int,String] = <function1>

Il semble que l'analyseur n'était pas sûr où placer le début de la fonction anonyme. Donc, ma nouvelle question est « Comment aider l'analyseur pour limiter la limite d'une fonction anonyme? »

Était-ce utile?

La solution

Je ne sais pas, je comprends la question, mais identity est peut-être ce que vous cherchez:

scala> Map(1 -> "one") map (identity)
res66: scala.collection.mutable.Map[Int,java.lang.String] = Map((1,one))

ou faire quelques tours:

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))

Autres conseils

Je trouve une réponse par Daniel, fonctions anonymes et cartes à Scala , cette réponse me laisse clairement comment l'espace réservé processus d'analyse syntaxique dans ce cas. merci pour tous.

Je ne vois aucune valeur dans ce que vous essayez de faire ici, la bonne façon de mapper une collection lui-même est pas à la carte d'appel!

Mauvais:

Map(1 -> "one") map (_)

droite:

Map(1 -> "one")

Il est même pas utile comme une opération de copie peu profonde, la valeur par défaut Scala La carte est immuable et il n'y a pas de point de le copier.


  Map(1 -> "one") map((x)=>x)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top