Каково различие между представлением и потоком?

В платформе Scala 2.8 наборов, между чем различие view и toStream?

22
задан Craig P. Motlin 17 February 2010 в 17:08
поделиться

2 ответа

В представлении элементы пересчитываются каждый раз при доступе к ним. В потоке элементы сохраняются по мере их оценки.

Например:

val doubled = List(1,2,3,4,5,6,7,8,9,10).view.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))

дважды переоценивает карту для каждого элемента. Один раз для первого отпечатка и еще раз для второго. Напротив,

val doubled = List(1,2,3,4,5,6,7,8,9,10).toStream.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))

удваивает элементы только один раз.

Просмотр подобен рецепту создания коллекции. Когда вы запрашиваете элементы представления, он каждый раз выполняет рецепт.

Ручей похож на парня с кучей сухих стираемых карточек. Этот парень умеет вычислять последующие элементы коллекции. Вы можете попросить у него следующий элемент коллекции и дать вам карточку с написанным на ней элементом и привязать веревку от карточки к его пальцу (чтобы помочь ему запомнить). Кроме того, перед тем как дать вам карту, он отвязывает первую веревку от пальца и привязывает ее к новой карте.

Если вы держите первую карту (т.е. сохраняете ссылку на заголовок потока), у вас могут в конечном итоге закончиться карты (т.е. память), когда вы запросите следующий элемент, но если вам не нужно идти Вернувшись к первым элементам, вы можете перерезать веревку и передать парню ненужные карты, и он сможет использовать их повторно (в конце концов, они стираются сухим способом). Таким образом поток может представлять бесконечную последовательность без нехватки памяти.

41
ответ дан 29 November 2019 в 04:12
поделиться

Джефф ответ охватывает почти все, но я хочу добавить, что Stream представляет собой последовательность, подобную List , а все виды коллекций (карт, наборов, проиндексированных последовательностей) имеют представления.

10
ответ дан 29 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: