From d8fc05fcb9c6161f4c0959e2e2471f597483e0f4 Mon Sep 17 00:00:00 2001 From: ksss Date: Sun, 23 Mar 2014 20:11:20 +0900 Subject: Hash#{reject,reject!} support return Enumerator --- mrblib/hash.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mrblib/hash.rb b/mrblib/hash.rb index 491d2a0ee..4b74550e7 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -134,6 +134,8 @@ class Hash # 1.8/1.9 Hash#reject! returns Hash; ISO says nothing. def reject!(&b) + return to_enum :reject! unless block_given? + keys = [] self.each_key{|k| v = self[k] @@ -150,6 +152,8 @@ class Hash # 1.8/1.9 Hash#reject returns Hash; ISO says nothing. def reject(&b) + return to_enum :reject unless block_given? + h = {} self.each_key{|k| v = self[k] -- cgit v1.2.3 From d9068f0583b14e14b3d0b3a9ea6cc03657041012 Mon Sep 17 00:00:00 2001 From: ksss Date: Sun, 23 Mar 2014 20:13:49 +0900 Subject: Hash#{reject,reject!} fix yield value --- mrbgems/mruby-enumerator/test/enumerator.rb | 14 ++++++++++++++ mrblib/hash.rb | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index 6c224eaa3..5954af4e0 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -508,6 +508,20 @@ assert 'Hash#select!' do assert_equal({3=>4}, h) end +assert 'Hash#reject' do + h = {1=>2,3=>4,5=>6} + hret = h.reject.with_index {|a,b| a[1] == 4} + assert_equal({1=>2,5=>6}, hret) + assert_equal({1=>2,3=>4,5=>6}, h) +end + +assert 'Hash#reject!' do + h = {1=>2,3=>4,5=>6} + hret = h.reject!.with_index {|a,b| a[1] == 4} + assert_equal h, hret + assert_equal({1=>2,5=>6}, h) +end + assert 'Range#each' do a = (1..5) b = a.each diff --git a/mrblib/hash.rb b/mrblib/hash.rb index 4b74550e7..3c08ccd9c 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -139,7 +139,7 @@ class Hash keys = [] self.each_key{|k| v = self[k] - if b.call(k, v) + if b.call([k, v]) keys.push(k) end } @@ -157,7 +157,7 @@ class Hash h = {} self.each_key{|k| v = self[k] - unless b.call(k, v) + unless b.call([k, v]) h[k] = v end } -- cgit v1.2.3