Issue #13495 has been updated by marcandre (Marc-Andre Lafortune).


PS: "Enumerable does not have size" is incorrect. `Enumerable` have a `size` method, although it may return `nil` if the result can not be calculated lazily.

----------------------------------------
Feature #13495: add Range#count as an alias to Range#size
https://bugs.ruby-lang.org/issues/13495#change-64460

* Author: AaronLasseigne (Aaron Lasseigne)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
For infinite ranges you can't call `count`, you have to call `size`.

~~~
irb> (1..Float::INFINITY).count # have to interrupt to stop it

irb> (1..Float::INFINITY).size
=> Infinity
~~~

The problem with this is that Range is an Enumerable. Enumerable does not have `size` it has `count`. So, if you want to implement a method for any Enumerable and you want to check the number of items you can't rely on `count`. Instead you have to do:

~~~
enum_count =
  begin
    size
  rescue NameError
    count
  end
~~~

Making Range#count as an alias of Range#size would allow people to make methods for Enumerable classes that rely on `count`.



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