[#81492] [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — normalperson@...

Issue #13618 has been reported by normalperson (Eric Wong).

12 messages 2017/06/01

[ruby-core:81818] [Ruby trunk Feature#13692] Array#index?

From: se8.and@...
Date: 2017-06-28 19:23:16 UTC
List: ruby-core #81818
Issue #13692 has been updated by se8 (S辿bastien Durand).


This feature may not be that good, I agree. :)

I thought it could occasionally be useful when querying arrays. For example, we have this method in Ruby Facets:

https://github.com/rubyworks/facets/blob/master/lib/core/facets/array/from.rb

~~~ ruby
def from(index)
    return [] if index >= size
    self[index..-1]
end
~~~


Here the problem is that this method uses "index >= size" to check if the index exists. It's ok as long as we use positive indexes, but it doesn't work with negative indexes:

~~~ ruby
[0, 1, 2].from(1) # => [1, 2]
[0, 1, 2].from(10) # => []
[0, 1, 2].from(-10) # => nil - and I was expecting an empty array to chain other methods
~~~

Relying on index? solves that problem:

~~~ ruby
def from(index)
  if index?(index)
     self[index..-1]
  else
    []
  end
end
~~~


~~~ ruby
[0, 1, 2].from(-10) # => []
~~~ 

Also, it could be nice to have similar Hash and Array features:

~~~ ruby
key?(key) # => true or false
index?(index) # => true or false
key(value) # => a key
index(value) # => an index
~~~

But yes, Array is not a numerical Hash and is not designed to be used that way:

~~~ ruby
array = []
array[42] = 'Hello World !'
array.size # => 43
~~~


So I don't know really. It's not a life changing method for sure! :)

----------------------------------------
Feature #13692: Array#index?
https://bugs.ruby-lang.org/issues/13692#change-65514

* Author: se8 (S辿bastien Durand)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Hello!

We currently have these methods:

~~~
Hash#key(value)
Hash#key?(key)
Array#index(value)
~~~

I was thinking we could add this tiny method:

~~~
Array#index?(index)
~~~

as this is sometimes useful to check if an array index exists.



~~~ ruby
class Array

  def index?(index)
    index.between?(0 - size, size - 1)
  end

end

['a', 'b', 'c'].index?(0) # => true
['a', 'b', 'c'].index?(2) # => true
['a', 'b', 'c'].index?(3) # => false
['a', 'b', 'c'].index?(-1) # => true
['a', 'b', 'c'].index?(-3) # => true
['a', 'b', 'c'].index?(-4) # => false
[false, nil].index?(0) #=> true
[false, nil].index?(1) #=> true
~~~




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

Prev Next