Jestem zdezorientowany przez pisanie za kulisami w celu zrozumienia na mapach. Moje zrozumienie jest, że zewnętrzna typu kolekcja jest zwykle powinien być zachowany, i widzimy, że oczekiwane zachowanie w dwóch następujących przypadkach:Scala - nieoczekiwany typ przełączenia z mapy na Iterable w celu zrozumienia?
scala> for {
| (k,v) <- Map(0->1,2->3)
| } yield k -> v
res0: scala.collection.immutable.Map[Int,Int] = Map(0 -> 1, 2 -> 3)
scala> for {
| (k,v) <- Map(0->1,2->3)
| foo = 1
| } yield k -> v
res1: scala.collection.immutable.Map[Int,Int] = Map(0 -> 1, 2 -> 3)
Ale kiedy dodać drugie zadanie wewnątrz do zrozumienia, że coś zaskakującego:
scala> for {
| (k,v) <- Map(0->1,2->3)
| foo = 1
| bar = 2
| } yield k -> v
res2: scala.collection.immutable.Iterable[(Int, Int)] = List((0,1), (2,3))
Dlaczego tak się dzieje?