Когда именно оценивается глава потока?

Обычно, если вы создаетеStream объект, голова будет жадно оценена:

scala> Stream( {println("evaluating 1"); 1} , 2, 3)
evaluating 1
res63: scala.collection.immutable.Stream[Int] = Stream(1, ?)

Если мы создаем поток, к которому добавляем один и тот же оператор, кажется немного удивительным, что заголовок не оценивается до объединения. то есть

scala> 0 #:: Stream( {println("evaluating 1"); 1} , 2, 3)
res65: scala.collection.immutable.Stream[Int] = Stream(0, ?)

(#:: является правоассоциативным и является методом prepend наConsWrapper, который является неявным классомStream.)

Как это не оценивает свою голову перед добавлением 0? Неужели хвостовой поток (или ячейка минусов) не существует в куче, пока мы не примем значения из результирующего потока? Но если это так, как мы называем#:: метод на объекте, который еще не существует?

Ответы на вопрос(2)

Ваш ответ на вопрос