[ruby-core:98414] [Ruby master Feature#16899] Proposal: Add Array#both_end method
From:
shevegen@...
Date:
2020-05-17 18:33:23 UTC
List:
ruby-core #98414
Issue #16899 has been updated by shevegen (Robert A. Heiler).
I think #first_last would be a better name as well; primary reason being that we
already have #first and #last.
I am also ok with the proposal itself, although I think I have not had a need to
use this often. But I don't mind such a method existing.
#extremes is a bit of a strange name though. It reminds me of mathematics.
#bookends for some reason reminds me of a bookworm - no idea why. :)
#both_end and #both_ends are a bit strange as names. I think one problem here
is that the name implies "ends", but we also have #first and #last, and I am
not sure if both first, and last, can be considered as two ends? What about
circular arrays? :P
So I think #first_last would be a better name. (A single name might be better
but it is harder to find a goot name there.)
----------------------------------------
Feature #16899: Proposal: Add Array#both_end method
https://bugs.ruby-lang.org/issues/16899#change-85683
* Author: S_H_ (Shun Hiraoka)
* Status: Open
* Priority: Normal
----------------------------------------
## About
Add get first & last value method `Array#both_end`.
## Current Status
Somtimes, we want to get both end Array value. But, now no method implemented these behavior.
So, define these code.
```ruby
class Array
def get_first_and_last(count)
[self.first(count), self.last(count)]
end
end
```
## Proposal
Get both end Array value method. `Array#both_end`.
Implment new method `Array#both_end` that get both end value in `Array`.
## Array#both_end behavior
```ruby
# normal Array
ary = [ "w", "x", "y", "z" ]
ary.both_end #=> ["w", "z"]
ary.both_end(2) #=> [["w", "x"], ["y", "z"]
# empty Array
[].both_end #=> [nil, nil]
[].both_end #=> [nil, nil]
# 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 implmentation used `Array#asscoc`, `Array#first` and `Array#last` in C 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 I should be these code make error.
And, What type error is best?
```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) is best?
I would appreciate your feedback. Thanks
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>