[#97319] [Ruby master Feature#16667] Allow parameters to Symbol#to_proc and Method#to_proc — jgomo3@...

Issue #16667 has been reported by jgomo3 (Jes俍 Gez).

10 messages 2020/03/01

[#97344] [Ruby master Feature#16670] Reverse order of `expression` in `pattern` for 1-line pattern matching while it's still experimental — ttilberg@...

Issue #16670 has been reported by ttilberg (Tim Tilberg).

9 messages 2020/03/03

[#97355] [Ruby master Misc#16671] BASERUBY version policy — ko1@...

Issue #16671 has been reported by ko1 (Koichi Sasada).

10 messages 2020/03/04

[#97359] [Ruby master Bug#16672] net/http leaves original content-length header intact after inflating response — justin.reid@...

Issue #16672 has been reported by jmreid (Justin Reid).

15 messages 2020/03/04

[#97390] [Ruby master Bug#16677] Negative integer powered (**) to a float number results in a complex — camille.drapier@...

Issue #16677 has been reported by CamilleDrapier (Camille Drapier).

25 messages 2020/03/07

[#97410] [Ruby master Bug#16680] [Breaking Change] Ruby 2.7 not support symlinks folder in $LOAD_PATH to work with autoload. — vil963@...

Issue #16680 has been reported by zw963 (Wei Zheng).

8 messages 2020/03/07

[#97416] [Ruby master Bug#16682] Ruby 2.7.0p0 crash on exit if there is an active RUBY_INTERNAL_EVENT_GC_EXIT tracepoint — jean.boussier@...

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

16 messages 2020/03/09

[#97448] [Ruby master Feature#16688] Allow #to_path object as argument to system() — daniel@...42.com

Issue #16688 has been reported by Dan0042 (Daniel DeLorme).

12 messages 2020/03/11

[#97528] [Ruby master Misc#16693] DevelopersMeeting20200410Japan — mame@...

Issue #16693 has been reported by mame (Yusuke Endoh).

12 messages 2020/03/16

[#97536] [Ruby master Bug#16694] JIT vs hardened GCC with PCH — v.ondruch@...

Issue #16694 has been reported by vo.x (Vit Ondruch).

11 messages 2020/03/18

[#97538] [Ruby master Bug#16695] Stack consistency error when using the return value — s.wakeup31@...

Issue #16695 has been reported by s4ichi (takamasa saichi).

10 messages 2020/03/18

[#97554] [Ruby master Bug#16697] Hash.ruby2_keywords_hash?(value) should support any object — eregontp@...

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

12 messages 2020/03/19

[#97609] [Ruby master Bug#16740] Deprecating and removing the broken Process.clock_getres — eregontp@...

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

14 messages 2020/03/28

[#97621] [Ruby master Bug#16743] problem with multi threading [BUG] Segmentation fault — pauloo.jansen@...

Issue #16743 has been reported by paulorja (paulo jansen).

12 messages 2020/03/29

[#97629] [Ruby master Feature#16744] Flag to load current bundle without using bundle exec — headius@...

Issue #16744 has been reported by headius (Charles Nutter).

11 messages 2020/03/30

[ruby-core:97392] [Ruby master Feature#16665] Add an Array#except_index method

From: sin@...
Date: 2020-03-07 06:39:17 UTC
List: ruby-core #97392
Issue #16665 has been updated by prajjwal (Prajjwal Singh).


There needs to be more discussion on the behavior of this method.

Logically, `except_indices` should be the complement of `values_at`, so for the purpose of writing test cases I added this stopgap:

```ruby
def except_indices(*idx)
  self - self.values_at(*idx)
end
```

And ended up with following test cases:

```ruby
  def test_except_indices
    a = @cls['a', 'b', 'c', 'd', 'e']

    assert_equal(@cls['a', 'c'], a.except_indices(1, -2, -1))
    assert_equal(@cls['c', 'd', 'e'], a.except_indices(0, 1, 10))
    assert_equal(@cls['a', 'b', 'c', 'd', 'e'], a.except_indices(10, 20, 30))

    assert_equal(@cls[], a.except_indices(0..4))
    assert_equal(@cls['c', 'd', 'e'], a.except_indices(0..1))
    assert_equal(@cls['c'], a.except_indices(0..1, 3..4))
    assert_equal(@cls['a', 'b', 'c'], a.except_indices(3..15))
    # Logically except_indices is the complement of values_at, and values_at
    # returns an empty array when given a range starting with a negative number.
    # This could change in the future.
    # https://bugs.ruby-lang.org/issues/16678
    assert_equal(@cls['a', 'b', 'c', 'd', 'e'], a.except_indices(-1..2))
  end
```

However, I'm left wondering whether that last case is something that should be fixed (with `values_at` being changed to accomodate ranges starting with a negative), or if this is fine.

Any feedback welcome. Full commit is at - https://github.com/Prajjwal/ruby/commit/0bb2788fb249df4381982cea957c7feaadccd0ed.

----------------------------------------
Feature #16665: Add an Array#except_index method
https://bugs.ruby-lang.org/issues/16665#change-84522

* Author: alex_golubenko (Alex Golubenko)
* Status: Open
* Priority: Normal
----------------------------------------
The main idea is to implement a method that we can use to exclude elements from the array by their indices.

For example:

``` ruby
%w( a b c d e f).except_index(0, -1) 
=> ["b", "c", "d", "e"]

%w( a b c d e f g h ).except_index(0..1, 3, -2..-1)
=> ["c", "e", "f"]
```

I was meeting many questions on the StackOverflow about how to do such functionality also found many topics about it.
So I think it might a helpful addition.

I spent a few days finding the proper solution on Ruby that might be acceptable with integers and ranges(both positive and negative) and has good performance: 

```ruby
  def except_index(*indexes)
    indexes.each_with_object(dup) do |ind, obj|
      ind.is_a?(Range) ? ind.each { |i| obj[i] = false } : obj[ind] = false
    end.select(&:itself)
  end
```

As you can see it's have not the best readability so I think it's a good point to add a built-in method on C.



-- 
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>

In This Thread