From d380c7d26f1056c021281d56c2d7110f9d5ce2d1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 16 Sep 2019 08:01:08 +0900 Subject: Implement `filter_map` from Ruby2.6. --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 12 ++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 5 +++++ 2 files changed, 17 insertions(+) (limited to 'mrbgems/mruby-enum-ext') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 171737e28..e354a4c5e 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -826,5 +826,17 @@ module Enumerable end hash.values end + + def filter_map(&blk) + return to_enum(:find_index, val) unless blk + + ary = [] + self.each do |x| + x = blk.call(x) + ary.push x if x + end + ary + end + alias filter select end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 6929d8ddc..8c8daa678 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -188,3 +188,8 @@ assert("Enumerable#to_h") do assert_equal h0, h assert_equal({1=>4,3=>8}, c.new.to_h{|k,v|[k,v*2]}) end + + +assert("Enumerable#filter_map") do + assert_equal [4, 8, 12, 16, 20], (1..10).filter_map{|i| i * 2 if i%2==0} +end -- cgit v1.2.3