In the documentation says
Lazily takes the next
count
elements from the enumerable and stops enumeration
As I understand what it does is to stop enumeration in the resulting stream, the original one remains unchanged.
Is that true?
In the documentation says
Lazily takes the next
count
elements from the enumerable and stops enumeration
As I understand what it does is to stop enumeration in the resulting stream, the original one remains unchanged.
Is that true?
Given elixir is a language with immutable data it can’t change even if it wanted to. So yes, the original stream stays as it was.
This depends on the implementation of the stream.
A file stream will advance the read position in the underlying file descriptor.
Therefore the rule of thumb is to not reuse a stream from an unknown source.
I have recently used something like:
Stream.resource(
fn -> [] end,
fn acc ->
receive do
{:message, msg} -> {[msg], acc}
end
end,
fn _ -> [] end
)
I highly doubt that such as stream would be left “as it was”.
@ludo if you are looking for something like Stream.next/2
or Enum.split/2
that would return one extracted value and “updated” stream then unfortunately there is no such thing right now (and it is really sad, as it would be enormously handy function).