Ответ 1
Спасибо michael.kebe за ваш комментарий.
В этом объясняется, как for
преобразуется в операции с map
, flatMap
, filter
и foreach
. Итак, мой пример:
val s = for (i <- 0 to 9) yield math.random + i
переводится на что-то вроде этого (я не уверен, что в этом случае он переведен на map
или flatMap
):
val s = (0 to 9) map { math.random + _ }
Результат типа операций типа map
в коллекциях зависит от коллекции, которую вы вызываете. Тип 0 to 9
- это Range.Inclusive
:
scala> val d = 0 to 9
d: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Результатом операции map
является IndexedSeq
(из-за материала построителя в библиотеке коллекций).
Итак, чтобы ответить на мой вопрос: результат for (...) yield ...
зависит от того, какой тип находится внутри скобок. Если я хочу получить List
, я мог бы сделать это:
scala> val s = for (i <- List.range(0, 9)) yield math.random + i
s: List[Double] = List(0.05778968639862214, 1.6758775042995566, ...