summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorksss <[email protected]>2014-03-23 20:13:49 +0900
committerksss <[email protected]>2014-03-23 20:13:49 +0900
commitd9068f0583b14e14b3d0b3a9ea6cc03657041012 (patch)
tree47e73c5bf0c30b5c53728d3ed0167a543f49908c
parentd8fc05fcb9c6161f4c0959e2e2471f597483e0f4 (diff)
downloadmruby-d9068f0583b14e14b3d0b3a9ea6cc03657041012.tar.gz
mruby-d9068f0583b14e14b3d0b3a9ea6cc03657041012.zip
Hash#{reject,reject!} fix yield value
-rw-r--r--mrbgems/mruby-enumerator/test/enumerator.rb14
-rw-r--r--mrblib/hash.rb4
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
}