Я попытался использовать Map.map для преобразования карты в список кортежей. Однако это не удается. Я сделал следующие эксперименты:
val m = Map(("a" -> 1), ("b" -> 2))
//> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v} //> r1 : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b) //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2)) //> r3 : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq //> r4 : Seq[(String, Int)] = ArrayBuffer((a,1), (b,2))
Обратите внимание, как создается List для отдельных элементов (r1), но создается карта для кортежей (r3). Даже не заставляя обрабатываемый тип (r2). Только явный вызов Seq сделал это (r4). Итак, мой вопрос: почему/как MapMap "автоматически" создает новую карту, а не список, например? На самом деле, как определяется тип возврата (Seq, List и т.д.)