Feature #16899
Updated by sawa (Tsuyoshi Sawada) over 4 years ago
## About Add a method that gets both the get first and the & last elements of an array: value method `Array#both_end`. ## Current Status Sometimes, Somtimes, we want to get the elements at both ends of an array. But now, end Array value. But, now no method has this implemented these behavior. So, define this method: these code. ```ruby class Array def get_first_and_last(count) [self.first(count), self.last(count)] end end ``` ## Proposal Get the elements at both ends of an array with end Array value method. `Array#both_end`. Implement a Implment new method `Array#both_end` that gets the elements at get both ends of an array. end value in `Array`. ## Array#both_end behavior Normal array: ```ruby # normal Array ary = [ "w", "x", "y", "z" ] ary.both_end #=> ["w", "z"] ary.both_end(2) #=> [["w", "x"], ["y", "z"] ``` Empty array: ```ruby # empty Array [].both_end #=> [nil, nil] [].both_end #=> [nil, nil] ``` Argument exceeds the array size: ```ruby # args num is over Array size ary = [ "w", "x", "y", "z" ] ary.both_end(10) #=> [[ "w", "x", "y", "z" ], [ "w", "x", "y", "z" ]] ``` ## Implementation This implementation uses implmentation used `Array#asscoc`, `Array#first`, `Array#first` and `Array#last` in C function. func. ```c static VALUE rb_ary_both_end(int argc, VALUE *argv, VALUE ary) { VALUE first, last; rb_check_arity(argc, 0, 1); if (RARRAY_LEN(ary) == 0) return rb_assoc_new(Qnil, Qnil); first = rb_ary_first(argc, argv, ary); last = rb_ary_last(argc, argv, ary); return rb_assoc_new(first, last); } ``` ## Problem I'm wondering if the following I should be these code should raise an error, and if so, what kind of make error. And, What type error is the best. best? Argument exceeds the array size: ```ruby # args num is over Array size ary = [ "w", "x", "y", "z" ] ary.both_end(10) #=> error can't get both end value! ``` Also, I wonder if this method name (`Array#both_end`) name(Array#both_end) is the best. best? I would appreciate your feedback. Thanks