Igor Kolomiets
07/14/2022, 9:56 PMfun main() {
var numbers = emptySequence<Int>()
numbers = sequence {
yieldAll(numbers)
yield(1)
}
println(numbers.iterator().next()) // throws StackOverflowError
}
I do realize that such an approach to build up a sequence may seem unnatural, but for my case (I have to implement Kotlin Serialization’s Encoder interface which methods adds/yields next value for the sequence) I haven’t figured out an alternative.ephemient
07/14/2022, 9:58 PMemptySequence<Int>()
part is irrelevant, you have written something (mostly) equivalent to
lateinit var numbers: Sequence<Int>
numbers = sequence {
yieldAll(numbers)
yield(1)
}
Igor Kolomiets
07/14/2022, 10:02 PMprintln(numbers.iterator().next())
still throws StackOverflowError… 😞ephemient
07/14/2022, 10:03 PMIgor Kolomiets
07/14/2022, 10:15 PMnumbers
when it won’t be an empty sequence by the time iterator is created and likely leads to an infinite recursion…Chris Lee
07/14/2022, 10:31 PMnkiesel
07/22/2022, 4:46 PMfun main() {
val numbers = emptySequence<Int>()
val myNumbers = sequence {
yieldAll(numbers)
yield(1)
}
println(myNumbers.iterator().next())
}