Напомним, что понимание for
обессахаривается на вызовы map()
и flatMap()
(и withFilter()
). В этом случае, поскольку в каждом из ваших примеров есть один генератор (<-
), каждый из них становится одним вызовом map()
.
Также следует помнить, что map()
вернет ту же монаду (тип оболочки), что и он был вызван.
В первом примере вы отображаете на Map
, поэтому вы получаете Map
назад: от Map[String,Double]
до Map[Double,String]
. Кортежи преобразуются в пары ключ-> значение.
Во втором примере вы отображаете Set
элементов с помощью клавиш Map
, поэтому вы получаете Set
обратно , Преобразование кортежей не происходит. Они оставлены как кортежи.
Чтобы получить Map
из второго примера, то есть, чтобы преобразовать кортежи, оберните весь for
в скобки и пометьте .toMap
в конце.