Project

General

Profile

Bug #12145

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

Added by sawa (Tsuyoshi Sawada) almost 2 years ago. Updated almost 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:74168]

Description

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.

History

#1 [ruby-core:74169] Updated by sawa (Tsuyoshi Sawada) almost 2 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.).

Also available in: Atom PDF