first(0) and last(0) behavior
I'm not sure if there was an explicit decision to have Array#first(0) and last(0) return the entire receiver, but it's messing me up slightly.
"abc".first(3) => "abc"
"abc".first(2) => "ab"
"abc".first(1) => "a"
"abc".first(0) => "abc"
There's similar behavior with last(0).
In my opinion, first(0) and last(0) should return a zero-length collection.
Is there a rationale for their current behavior, or is it a mistake?
Updated by daz (Dave B) over 10 years ago
Those methods (for String) don't exist in Matz Ruby:
puts 'ruby %s (%s) [%s]' % [RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM]
#ruby 1.8.6 (2008-08-11) [i386-mswin32]
#tmp:3: undefined method `first' for "abc":String (NoMethodError)
# ... neither in 1.9.1 ...
#ruby 1.9.1 (2009-01-30) [i386-mswin32_90]
<main>': undefined methodfirst' for "abc":String (NoMethodError)
A quick search finds they are added by Rails but maybe you have
some other library which adds the methods.
Either way, if you can't track them down, try asking on either
the ruby-talk or Rails lists.