Project

General

Profile

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 

Back