Skip to content

Add lifetime-preserving version of iterators #1232

@RReverser

Description

@RReverser

Currently, ArrayView has a helpful lifetime-preserving methods like to_slice, but no way to preserve lifetimes of iterators like axis_iter, outer_iter and such.

This makes it difficult to return iterables from helper functions like this:

fn lazy_process(&self) -> impl '_ + Serialize {
	IterSerialize(self.data.outer_iter().map(move |column| {
	    IterSerialize(column.outer_iter().map(|pixel| pixel.to_slice().unwrap())) // <-- cannot return value referencing function parameter `column`
	}))
}

I suggest there should be overrides like into_outer_iter, into_axis_iter etc. on ArrayView that would return iterators tied by the lifetime to the original data instead of the ArrayView itself.

Note: while looking for open issues, the only relevant I found was #320, but there the author could afford to just reshape / flatten the data; that might not always be possible, like in my example above. @bluss mentioned issues and suggestions similar to what I'm describing here though: #320 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions