Czy ktoś może wyjaśnić, dlaczego poniższe nie działa. W pewnym sensie tracę kompilację informacji na temat wnioskowania o typ, kiedy robię to, co robię, gdy robię toSet
, ale nie rozumiem dlaczego.toSet i typ wnioskowania
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))
Wygląda na to, że kompilator potrzebuje pomocy w sprecyzowaniu typu: 'ids.toSet.map (Foo (_: Int," bar "))' – jarandaf
Tak, ale dlaczego nie kompilator potrzebuje informacji, kiedy robię toSet po mapie? – regexp
To działa myląco, 'val a = ids.toSet; a.map (Foo (_, "bar")) ' – elm