У меня есть глубокое «вложенное» для понимания, упрощенное до трех уровней ниже: x, y и z. Я надеялся, что делает только х в Stream
бы у и г вычисления ленивых тоже:Вложенное ленивое для понимания
val stream = for {
x <- List(1, 2, 3).toStream
y <- List("foo", "bar", "baz")
z = {
println("Processed " + x + y)
x + y
}
} yield z
stream take (2) foreach (doSomething)
Но это вычисляет все 3 элемента, о чем свидетельствует 3 гравюр. Я бы хотел только вычислить первые 2, так как это все, что я беру из потока. Я могу обойти это, позвонив toStream
на второй List
и так далее. Есть ли лучший способ, чем называть это на каждом уровне понимания?
Уточненный вопрос. Я не собирался z быть «Unit». Теперь есть 3 печати вверх, хотя я беру только первые 2 элемента потока и 'doSomething' с ними. Как сделать 3-й отпечаток («расчет») не произойдет? – Bluu
@Bluu три вычисления для каждого элемента 'y', как следует из числа« 1 ». Как я уже сказал, голова всегда оценивается. Попробуйте 'stream take 4 foreach println', и вы увидите, что вторая партия вычисляется только после того, как первые 3 взяты –
Теперь я вижу. Благодарю. И только для того, чтобы строго оценивать голову головы, вот почему мне нужно вызвать «Список» («foo», «bar», «baz»). ToStream'. Знаете ли вы об этом? – Bluu