Frage

Ich sah einen Code unten:

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

diese Rückkehr ein Iterable [Int], aber wenn ich nichts mit der Karte tun will, wie es zu tun?

Ich mag so etwas wie unten tun, aber die folgenden Code kann nicht kompiliert werden, das weiß ich, weil es eine Objektinstanz keine Funktion, sondern wie eine Funktion erstellen x => x und Verwendung Platzhalter zu tun:

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

, wie dies zu tun?

AKTUALISIERT

Es tut uns confuse leidenschaftliche Person. Ich will wissen, warum map (_) != map (x => x), Compiler den Code zu (x$1) => Map(1.$minus$greater("one")).map(x$1) verwandeln, warum nicht Map('a'.$minus$greater(1)).map((x$1) => x$1), und tut es einen Weg hat, kann _ machen diesen Code verwenden?

ich Code unten, um Hilfe Compiler verwendet, um den _ Typ gefolgert:

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

Es scheint der Parser nicht sicher war, wo der Beginn der anonymen Funktion zu setzen. Also meine neue Frage ist: „Wie der Parser zu helfen, eine anonyme Funktion der Grenze? Einschränken“

War es hilfreich?

Lösung

Nicht sicher verstehe ich die Frage, aber identity ist vielleicht das, was Sie suchen:

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

oder, tun einige Tricks:

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

Andere Tipps

finde ich eine Antwort von Daniel, Anonyme Funktionen und Karten in Scala , diese Antwort lassen Sie mich klar, wie der Parser Prozess Platzhalter in diesem Fall. Dank für alle.

Ich kann keinen Wert in sehen, was Sie versuchen, hier zu tun, den richtigen Weg, um eine Sammlung zu sich selbst abzubilden ist nicht auf Anruf Karte!

Falsch:

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

Recht:

Map(1 -> "one")

Es ist nicht einmal nützlich als flache Kopie des Betriebs der Standard Scala Karte ist unveränderlich, und es gibt keinen Grund es zu kopieren.


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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top