[ruby-trunk - Bug #6473][Open] Enumerable#count

Issue #6473 has been reported by no6v (Nobuhiro IMAI).


Bug #6473: Enumerable#count

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version:
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]

=begin
Enumerable#count には、

Returns the number of items in enum if it responds to a #size
call,
otherwise the items are counted through enumeration. If an argument is

というコメントが書いてありますが、実際には

class E
include Enumerable

def each
end

def size
1
end
end

e = E.new
e.size # => 1
e.count # => 0

size は呼ばれていないようです。1.8 系や 1.9.1 の頃は 0 ではなく 1 が返っていたようです。
=end

Issue #6473 has been updated by no6v (Nobuhiro IMAI).

File enum_count.patch added

最終的に r25603 で size は呼ばなくなったようなので、コメントを修正したパッチを添付します。
改行位置の関係で行数が多いですが、内容は1文目しか変更してません。


Bug #6473: Enumerable#count
https://bugs.ruby-lang.org/issues/6473#change-26735

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version:
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]

=begin
Enumerable#count には、

Returns the number of items in enum if it responds to a #size
call,
otherwise the items are counted through enumeration. If an argument is

というコメントが書いてありますが、実際には

class E
include Enumerable

def each
end

def size
1
end
end

e = E.new
e.size # => 1
e.count # => 0

size は呼ばれていないようです。1.8 系や 1.9.1 の頃は 0 ではなく 1 が返っていたようです。
=end

Issue #6473 has been updated by mame (Yusuke E.).

Status changed from Open to Assigned
Assignee set to drbrain (Eric H.)

Hello, drbrain

This is a doc issue of Enumerable#count.
Could you check and import Nobuhiro’s patch?

English translation:

The rdoc of Enumerable#count says:

Returns the number of items in enum if it responds to a #size
call,
otherwise the items are counted through enumeration. If an argument
is

but actually it behaves as below:

class E
include Enumerable

def each
end

def size
  1
end

end

e = E.new
e.size # => 1
e.count # => 0

As you see, it does not call #size. 1.8 series and 1.9.1 returns 1
instead of 0.

As r25603 seemed to finally decide to stop calling #size, I’m attaching
a patch
that changes the rdoc.
The patch just changes the first line, though it looks bigger because of
new line.


Yusuke E. [email protected]

Bug #6473: Enumerable#count
https://bugs.ruby-lang.org/issues/6473#change-26736

Author: no6v (Nobuhiro IMAI)
Status: Assigned
Priority: Normal
Assignee: drbrain (Eric H.)
Category: core
Target version:
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]

=begin
Enumerable#count には、

Returns the number of items in enum if it responds to a #size
call,
otherwise the items are counted through enumeration. If an argument is

というコメントが書いてありますが、実際には

class E
include Enumerable

def each
end

def size
1
end
end

e = E.new
e.size # => 1
e.count # => 0

size は呼ばれていないようです。1.8 系や 1.9.1 の頃は 0 ではなく 1 が返っていたようです。
=end