diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-09-20 12:02:35 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-09-20 13:47:29 +0900 |
| commit | 19d3bb2d90f9806ea6cdef97a139de9f2050363a (patch) | |
| tree | 65b6de226502d8fb5ba02fca8708f3b2ec1a02a1 /mrbgems/mruby-enum-ext/mrblib/enum.rb | |
| parent | fa5f5954daa95b6e03bcbe16ffcce4d5e1946146 (diff) | |
| download | mruby-19d3bb2d90f9806ea6cdef97a139de9f2050363a.tar.gz mruby-19d3bb2d90f9806ea6cdef97a139de9f2050363a.zip | |
Make `#to_h` to take a block; [ruby-core:89088]
Diffstat (limited to 'mrbgems/mruby-enum-ext/mrblib/enum.rb')
| -rw-r--r-- | mrbgems/mruby-enum-ext/mrblib/enum.rb | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index a840ade3b..6cbacdf9e 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -803,13 +803,22 @@ module Enumerable # # => {:hello => 0, :world => 1} # - def to_h + def to_h(&blk) h = {} - self.each do |*v| - v = v.__svalue - raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array - raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2 - h[v[0]] = v[1] + if blk + self.each do |v| + v = blk.call(v) + raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array + raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2 + h[v[0]] = v[1] + end + else + self.each do |*v| + v = v.__svalue + raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array + raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2 + h[v[0]] = v[1] + end end h end |
