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.
This adds support for
last
for lists. Bothlast
andlast(n)
are supported.Because Ruby doesn't provide a great way to replicate the implicit conversions (
Integer.try_convert
exists in Ruby 3.1, but we'd still need to generate the error message manually because it returnsnil
instead of raising theTypeError
), some edge cases of the implementation ofArray#last
are not replicated:[].last(nil)
raises aTypeError
, whereas we just fail withundefined method `to_int' for nil:NilClass (NoMethodError)
[].last(object)
whereobject.to_int
doesn't return anInteger
raises aTypeError
, whereas we will call==
and<
onobject
, and the results may be unexpected (though that is a really edgy case).The first commit is really the most straightforward implementation, and we may not need the second one if we don't care about the edge case of
nil
orfalse
being passed and expecting an exception. I think in most caseslast(n)
is called with a literal value, so it's fine.