[#98098] [Ruby master Feature#16824] Follow RubyGems naming conventions for the stdlib — shannonskipper@...

Issue #16824 has been reported by shan (Shannon Skipper).

14 messages 2020/05/01

[#98147] [Ruby master Feature#16832] Use #name rather than #inspect to build "uninitialized constant" error messages — jean.boussier@...

Issue #16832 has been reported by byroot (Jean Boussier).

20 messages 2020/05/06

[#98174] [Ruby master Bug#16837] Can we make Ruby 3.0 as fast as Ruby 2.7 with the new assertions? — takashikkbn@...

Issue #16837 has been reported by k0kubun (Takashi Kokubun).

10 messages 2020/05/07

[#98241] [Ruby master Bug#16845] Building Ruby with old existing system Ruby results in make error with ./tool/file2lastrev.rb — erik@...

Issue #16845 has been reported by ErikSwan (Erik Swan).

7 messages 2020/05/09

[#98256] [Ruby master Feature#16847] Cache instruction sequences by default — jean.boussier@...

Issue #16847 has been reported by byroot (Jean Boussier).

16 messages 2020/05/11

[#98257] [Ruby master Feature#16848] Allow callables in $LOAD_PATH — jean.boussier@...

Issue #16848 has been reported by byroot (Jean Boussier).

27 messages 2020/05/11

[#98318] [Ruby master Bug#16853] calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7) [email protected]

Issue #16853 has been reported by sylvain.joyeux (Sylvain Joyeux).

12 messages 2020/05/13

[#98355] [Ruby master Bug#16889] TracePoint.enable { ... } also activates the TracePoint for other threads, even outside the block — eregontp@...

Issue #16889 has been reported by Eregon (Benoit Daloze).

16 messages 2020/05/14

[#98363] [Ruby master Feature#16891] Restore Positional Argument to Keyword Conversion — merch-redmine@...

Issue #16891 has been reported by jeremyevans0 (Jeremy Evans).

23 messages 2020/05/14

[#98371] [Ruby master Feature#16894] Integer division for Ruby 3 — andrew@...

Issue #16894 has been reported by ankane (Andrew Kane).

18 messages 2020/05/15

[#98391] [Ruby master Bug#16896] MakeMakefile methods should be private — eregontp@...

Issue #16896 has been reported by Eregon (Benoit Daloze).

10 messages 2020/05/15

[#98396] [Ruby master Feature#16897] Can a Ruby 3.0 compatible general purpose memoizer be written in such a way that it matches Ruby 2 performance? — sam.saffron@...

Issue #16897 has been reported by sam.saffron (Sam Saffron).

25 messages 2020/05/16

[#98453] [Ruby master Bug#16904] rubygems: psych: superclass mismatch for class Mark (TypeError) — jaruga@...

Issue #16904 has been reported by jaruga (Jun Aruga).

18 messages 2020/05/20

[#98486] [Ruby master Bug#16908] Strange behaviour of Hash#shift when used with `default_proc`. — samuel@...

Issue #16908 has been reported by ioquatix (Samuel Williams).

14 messages 2020/05/23

[#98569] [Ruby master Bug#16921] s390x: ramdom test failures for timeout or segmentation fault — jaruga@...

Issue #16921 has been reported by jaruga (Jun Aruga).

9 messages 2020/05/29

[#98599] [Ruby master Bug#16926] Kernel#require does not load a feature twice when $LOAD_PATH has been modified spec fails only on 2.7 — eregontp@...

Issue #16926 has been reported by Eregon (Benoit Daloze).

12 messages 2020/05/31

[ruby-core:98423] [Ruby master Feature#16899] Add method `Array#both_end`

From: gamelinks007@...
Date: 2020-05-18 01:44:08 UTC
List: ruby-core #98423
Issue #16899 has been updated by S_H_ (Shun Hiraoka).


Thanks for feedbacks.

shan (Shannon Skipper) wrote in #note-1:
> I think #both_ends reads better in the plural form. Or #first_last harkens to #min_max and is unambiguous. Other options might be #extremes or #bookends.
> 
> I'd vote #first_last.

shevegen (Robert A. Heiler) wrote in #note-2:
> 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.)


#first_last is good name. I use this name.


shyouhei (Shyouhei Urabe) wrote in #note-5:
> Why not start as a gem?  There are things not possible without core changes, but it seems this requested feature needs no such things.

OK, I'll started create gem to  Array#first_last and other useful methods implmented.


Thanks.

----------------------------------------
Feature #16899: Add method `Array#both_end`
https://bugs.ruby-lang.org/issues/16899#change-85693

* Author: S_H_ (Shun Hiraoka)
* Status: Open
* Priority: Normal
----------------------------------------
Add a method that gets both the first and the last elements of an array: `Array#both_end`.

## Current Status

Sometimes, we want to get the elements at both ends of an array. But now, no method has this behavior.

So, define this method:

```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 `Array#both_end`.

Implement a new method `Array#both_end` that gets the elements at both ends of an array.

## Array#both_end behavior

Normal array:

```ruby
ary = [ "w", "x", "y", "z" ]
ary.both_end     #=> ["w", "z"]
ary.both_end(2)  #=> [["w", "x"], ["y", "z"]
```

Empty array:

```ruby
[].both_end    #=> [nil, nil]
[].both_end    #=> [nil, nil]
```

Argument exceeds the array size:

```ruby
ary = [ "w", "x", "y", "z" ]
ary.both_end(10) #=> [[ "w", "x", "y", "z" ], [ "w", "x", "y", "z" ]]
```

## Implementation

This implementation uses `Array#asscoc`, `Array#first`, and `Array#last` in C function.

```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 code should raise an error, and if so, what kind of error is the best.

Argument exceeds the array size:

```ruby
ary = [ "w", "x", "y", "z" ]
ary.both_end(10) #=> error can't get both end value!
```

I wonder if this method name (`Array#both_end`) is the best.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next