Feature #12145

Aliashood between `size` and `length` is not consistent

Added by sawa (Tsuyoshi Sawada) over 4 years ago. Updated about 1 year ago.

Target version:


When size and length have the same implementation, depending on the class, they are either independently defined methods, or the former is an alias of the latter. Particularly for Array:

[].method(:size).original_name # => :length
[].method(:length).original_name # => :length

but for Hash, String, and Symbol:

{}.method(:size).original_name # => :size
{}.method(:length).original_name # => :length
"".method(:size).original_name # => :size
"".method(:length).original_name # => :length
:"".method(:size).original_name # => :size
:"".method(:length).original_name # => :length

This might be a big issue, but since there is a standard Ruby method original_name, which returns different results, whether this being one way or another should matter. And I see no reason why they should behave differently. They should be unified in one way. Perhaps Hash, String, and Symbol should be made in the same way as with Array.

Updated by sawa (Tsuyoshi Sawada) over 4 years ago

Similarly, Enumerable#inject and Enumerable#reduce and Enumerable#map and Enumerable#collect should be aliased (Although they are not particularly inconsistent, so the motivation for them is not as strong as size and length. But it is indeed strange that in RDoc, inject example appears under reduce and vice versa, etc.).


Updated by jeremyevans0 (Jeremy Evans) about 1 year ago

  • Backport deleted (2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN)
  • Tracker changed from Bug to Feature

Also available in: Atom PDF