summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-03 06:07:33 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-03 06:07:33 +0000
commit927b88eb8bc765a878bc05bfa43d84b672c808e4 (patch)
tree186c3017df211bd30436436f9fd7b67e7fd3ffab
parentb5af8dbe1754e722096decc64afc4416ee485587 (diff)
* lib/set.rb (Set#delete_if, Set#collect!, Set#reject!)
(Set#classify, Set#divide, Set#delete_if): Return an enumerator if no block is given. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16774 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--NEWS4
-rw-r--r--lib/set.rb10
3 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index ddcbb39fb3..eae67dbe4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jun 3 15:06:33 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#delete_if, Set#collect!, Set#reject!)
+ (Set#classify, Set#divide, Set#delete_if): Return an enumerator
+ if no block is given.
+
Tue Jun 3 12:51:57 2008 Akinori MUSHA <knu@iDaemons.org>
* enumerator.c (enumerator_allocate, enumerator_ptr): Properly
diff --git a/NEWS b/NEWS
index 1ca25959d5..4647c16c3f 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,10 @@ Note that each entry is kept so brief that no reason behind or
reference information is supplied with. For a full list of changes
with all sufficient information, see the ChangeLog file.
+== Changes since the 1.8.7 release
+
+
+
== Changes since the 1.8.6 release
=== Configuration changes
diff --git a/lib/set.rb b/lib/set.rb
index 1d7232dd6c..b61f3b7857 100644
--- a/lib/set.rb
+++ b/lib/set.rb
@@ -234,12 +234,14 @@ class Set
# Deletes every element of the set for which block evaluates to
# true, and returns self.
def delete_if
+ block_given? or return enum_for(__method__)
@hash.delete_if { |o,| yield(o) }
self
end
- # Do collect() destructively.
+ # Replaces the elements with ones returned by collect().
def collect!
+ block_given? or return enum_for(__method__)
set = self.class.new
each { |o| set << yield(o) }
replace(set)
@@ -249,6 +251,7 @@ class Set
# Equivalent to Set#delete_if, but returns nil if no changes were
# made.
def reject!
+ block_given? or return enum_for(__method__)
n = size
delete_if { |o| yield(o) }
size == n ? nil : self
@@ -346,6 +349,8 @@ class Set
# # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
# # 2002=>#<Set: {"f.rb"}>}
def classify # :yields: o
+ block_given? or return enum_for(__method__)
+
h = {}
each { |i|
@@ -373,6 +378,8 @@ class Set
# # #<Set: {3, 4}>,
# # #<Set: {6}>}>
def divide(&func)
+ func or return enum_for(__method__)
+
if func.arity == 2
require 'tsort'
@@ -491,6 +498,7 @@ class SortedSet < Set
end
def delete_if
+ block_given? or return enum_for(__method__)
n = @hash.size
@hash.delete_if { |o,| yield(o) }
@keys = nil if @hash.size != n