Я читаю Scala для нетерпимого, и я наткнулся на то, что заставило меня почесывать голову.
Следующее возвращает строку:
scala> for ( c<-"Hello"; i <- 0 to 1) yield (c+i).toChar
res68: String = HIeflmlmop
Но это возвращает вектор:
scala> for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
res72: scala.collection.immutable.IndexedSeq[Char] = Vector(H, e, l, l, o, I, f, m, m, p)
Текст, предшествующий этим двум примерам, читается...
"Когда тело цикла for начинается с выхода, тогда цикл создает набор значений, по одному для каждой итерации... Этот тип цикла называется понятием. Сгенерированная коллекция совместима с первым генератором.
Если сгенерированная коллекция совместима с первым генератором, то почему не второй пример возвращает тип Range, как в следующем:
scala> val range = 0 to 1
range: scala.collection.immutable.Range.Inclusive = Range(0, 1)
Или я неверно истолковываю то, что означает текст, "... сгенерированная коллекция совместима с первым генератором".