Я заметил, что Stream
устарел в Scala 2.13
, и они предлагают использовать LazyList
. Они также говорят: «Используйте LazyList (полностью ленивый) вместо Stream (у которого есть только ленивый хвост)».
Что это точно означает? Почему они устарели Stream
?
В чем разница между LazyList и Stream в Scala?
Ответы (2)
NthPortal, участник LazyList
, сообщает в Обновление и улучшение документации LazyList #7842
Ключевое различие между
LazyList
иStream
- и его ключевая особенность - заключается в том, что независимо от того, ленив он или нет, оценивается лениво. Я не уверен, как лучше передать это.
jwvh заявляет в связанном вопросе
Stream
элементы реализуются лениво, кроме 1-го (головного) элемента. Это было воспринято как недостаток.
Примечания к выпуску Scala 2.13 состояние
immutable.LazyList
заменяет immutable.Stream
. Stream
имел другое ленивое поведение и теперь устарел. (#7558, #7000)
Согласно запись в блоге:
LazyList предпочтительнее Stream
Stream устарел в пользу LazyList. Как следует из названия, LazyList — это связанный список, элементы которого оцениваются лениво. Важным семантическим отличием от Stream является то, что в LazyList и голова ленивы, тогда как в Stream ленив только хвост.
Также в документации Stream:
Устарело (начиная с версии 2.13.0)
Используйте LazyList (полностью ленивый) вместо Stream (у которого есть только ленивый хвост)
tail
, поэтому всегда вычислялсяhead
. Для многих это было неожиданно и приводило к ошибочному коду. С другой стороны, LayzList полностью ленив. Он не вычисляет голову, пока не будет вызван. Обратите внимание, что при вычислении заголовка LayzList также вычисляется его хвост, и наоборот. - person Luis Miguel Mejía Suárez   schedule 08.02.2020