В Scala, для многих (все?) типы наборов можно создать представления.
Что такое точно представление и для которых целей представления полезны?
Представления - это нестрогие версии коллекций. Это означает, что элементы вычисляются при доступе, а не так быстро, как в обычных коллекциях.
В качестве примера возьмем следующий код:
val xs = List.tabulate(5)(_ + 1)
val ys = xs.view map { x => println(x); x * x }
Просто это ничего не напечатает, но каждый доступ к списку будет выполнять вычисление и печатать значение, т.е. каждый вызов ys.head
приведет к в 1
печатается. Если вы хотите снова получить строгую версию коллекции, вы можете вызвать для нее force
. В этом случае вы увидите распечатанные номера.
Одно из применений представлений - это когда вам нужно пройти по коллекции значений, вычисление которых требует больших затрат, и вам нужно только одно значение за раз. Также представления позволяют создавать ленивые последовательности, вызывая для них toStream
, которые также будут кэшировать оцененные элементы.