diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-23 16:36:19 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-23 16:36:19 +0900 |
| commit | 9beef5fdb09139e697fc2eb5775b40fa84994fc9 (patch) | |
| tree | c89d44c37bf073bf59a68c9074e83e5b034892f9 | |
| parent | 85d20127a1ae732b7d6eed042766f3c9ed0e9cb7 (diff) | |
| parent | d09e4475bf3272d594e88b41ad1265da2c5517ec (diff) | |
| download | mruby-9beef5fdb09139e697fc2eb5775b40fa84994fc9.tar.gz mruby-9beef5fdb09139e697fc2eb5775b40fa84994fc9.zip | |
Merge pull request #1923 from ksss/hash-enumerator-select
Hash#{select,select!} support return Enumerator
| -rw-r--r-- | mrbgems/mruby-enumerator/test/enumerator.rb | 14 | ||||
| -rw-r--r-- | mrblib/hash.rb | 8 |
2 files changed, 20 insertions, 2 deletions
diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index fdee06450..6c224eaa3 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -494,6 +494,20 @@ assert 'Hash#each_value' do assert_equal [1,2], {a:1,b:2}.each_value.to_a.sort end +assert 'Hash#select' do + h = {1=>2,3=>4,5=>6} + hret = h.select.with_index {|a,b| a[1] == 4} + assert_equal({3=>4}, hret) + assert_equal({1=>2,3=>4,5=>6}, h) +end + +assert 'Hash#select!' do + h = {1=>2,3=>4,5=>6} + hret = h.select!.with_index {|a,b| a[1] == 4} + assert_equal h, hret + assert_equal({3=>4}, h) +end + assert 'Range#each' do a = (1..5) b = a.each diff --git a/mrblib/hash.rb b/mrblib/hash.rb index cd6ba8935..491d2a0ee 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -162,10 +162,12 @@ class Hash # 1.9 Hash#select! returns Hash; ISO says nothing. def select!(&b) + return to_enum :select! unless block_given? + keys = [] self.each_key{|k| v = self[k] - unless b.call(k, v) + unless b.call([k, v]) keys.push(k) end } @@ -178,10 +180,12 @@ class Hash # 1.9 Hash#select returns Hash; ISO says nothing. def select(&b) + return to_enum :select unless block_given? + h = {} self.each_key{|k| v = self[k] - if b.call(k, v) + if b.call([k, v]) h[k] = v end } |
