last(itr) should use Iterators.reverse #43497
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As I commented in #42225, we should really default to
first(Iterators.reverse(itr))
forlast(itr)
, rather than defaulting toitr[end]
, similar to how #34868 implementedlast(itr, n)
.This way you automatically get
last
for any iterable object that supports reverse iteration — otherwise,last(itr, n)
would work butlast(itr)
will fail, which is weird.I put in an
last(a) = a[end]
fast path forAbstractArray
andTuple
.In principle, this could be a breaking, if an object is indexable but doesn't support reverse iteration, but this seems like it should be uncommon?
PS. Currently,
Cmd
supports iteration and indexing but not reverse iteration, so I added an explicit fix for that type here. I'll make a separate PR that adds reverse iteration forCmd
, which is a cleaner fix.