summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-enumerator/test/enumerator.rb8
-rw-r--r--mrblib/hash.rb4
2 files changed, 12 insertions, 0 deletions
diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb
index c2b4c09ab..fdee06450 100644
--- a/mrbgems/mruby-enumerator/test/enumerator.rb
+++ b/mrbgems/mruby-enumerator/test/enumerator.rb
@@ -486,6 +486,14 @@ assert 'Hash#each' do
assert_equal [[:a,1], [:b,2]], c.sort
end
+assert 'Hash#each_key' do
+ assert_equal [:a,:b], {a:1,b:2}.each_key.to_a.sort
+end
+
+assert 'Hash#each_value' do
+ assert_equal [1,2], {a:1,b:2}.each_value.to_a.sort
+end
+
assert 'Range#each' do
a = (1..5)
b = a.each
diff --git a/mrblib/hash.rb b/mrblib/hash.rb
index 0423f7edc..cd6ba8935 100644
--- a/mrblib/hash.rb
+++ b/mrblib/hash.rb
@@ -69,6 +69,8 @@ class Hash
#
# ISO 15.2.13.4.10
def each_key(&block)
+ return to_enum :each_key unless block_given?
+
self.keys.each{|k| block.call(k)}
self
end
@@ -93,6 +95,8 @@ class Hash
#
# ISO 15.2.13.4.11
def each_value(&block)
+ return to_enum :each_value unless block_given?
+
self.keys.each{|k| block.call(self[k])}
self
end