Kann jemand erklären, warum das Folgende nicht funktioniert. Irgendwie verliert das kompilieren einige Informationen für die Typschlussfolgerung, wenn ich toSet
mache, aber ich verstehe nicht warum.toSet und Typ Inferenz
scala> case class Foo(id: Int, name: String)
defined class Foo
scala> val ids = List(1,2,3)
ids: List[Int] = List(1, 2, 3)
scala> ids.toSet.map(Foo(_, "bar"))
<console>:11: error: missing parameter type for expanded function ((x$1) => Foo(x$1, "bar"))
ids.toSet.map(Foo(_, "bar"))
^
scala> ids.map(Foo(_, "bar")).toSet
res1: scala.collection.immutable.Set[Foo] = Set(Foo(1,bar), Foo(2,bar), Foo(3,bar))
Scheint, dass der Compiler einige Hilfe braucht, um den Typ explizit zu machen, 'ids.toSet.map (Foo (_: Int," bar "))' – jarandaf
Ja, aber warum braucht der Compiler die Informationen nicht, wenn ich es tue die nach der Karte setzen ?? – regexp
Verwirrenderweise funktioniert das "val a = ids.toSet; a.map (Foo (_, "bar")) ' – elm