@ Adrian обычно так и есть, но как только вы добавляете полиморфизм в систему типов, в некоторых случаях вывод типов становится неразрешимым. Я предполагаю, что компилятор Scala несколько консервативен в ситуациях, когда могут возникнуть такие проблемы. В Java вы даже не можете написать такое выражение без указания всех параметров типа или использования необработанных типов - по крайней мере, аргумент функции необходимо будет аннотировать по типу, и в этом случае Scala также может правильно выводить типы.

у вывод типа здесь терпит неудачу?

scala> val xs = List(1, 2, 3, 3)
xs: List[Int] = List(1, 2, 3, 3)

scala> xs.toSet map(_*2)
<console>:9: error: missing parameter type for expanded function ((x$1) => x$1.$times(2))
       xs.toSet map(_*2)

Однако еслиxs.toSet назначается, компилируется.

scala> xs.toSet
res42: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> res42 map (_*2)
res43: scala.collection.immutable.Set[Int] = Set(2, 4, 6)

Кроме того, идя в другую сторону, преобразуя вSet изListи отображение наList соответствует.

scala> Set(5, 6, 7)
res44: scala.collection.immutable.Set[Int] = Set(5, 6, 7)

scala> res44.toList map(_*2)
res45: List[Int] = List(10, 12, 14)

Ответы на вопрос(3)

Ваш ответ на вопрос