diff --git a/enumerator.c b/enumerator.c index 193a865dbc5536..8622101bedfda3 100644 --- a/enumerator.c +++ b/enumerator.c @@ -1216,6 +1216,19 @@ append_method(VALUE obj, VALUE str, ID default_method, VALUE default_args) return str; } +/* + * call-seq: + * enumerator.eager -> enumerator + * + * Returns self. + */ + +static VALUE +enumerator_eager(VALUE obj) +{ + return obj; +} + /* * call-seq: * e.inspect -> string @@ -4478,6 +4491,7 @@ InitVM_Enumerator(void) rb_define_method(rb_cEnumerator, "inspect", enumerator_inspect, 0); rb_define_method(rb_cEnumerator, "size", enumerator_size, 0); rb_define_method(rb_cEnumerator, "+", enumerator_plus, 1); + rb_define_method(rb_mEnumerable, "eager", enumerator_eager, 0); rb_define_method(rb_mEnumerable, "chain", enum_chain, -1); /* Lazy */ diff --git a/test/ruby/test_enum.rb b/test/ruby/test_enum.rb index 7503e062726d8e..e0e127476b04e5 100644 --- a/test/ruby/test_enum.rb +++ b/test/ruby/test_enum.rb @@ -102,6 +102,10 @@ def each end end + def test_eager + assert_equal(@obj, @obj.eager) + end + def test_find assert_equal(2, @obj.find {|x| x % 2 == 0 }) assert_equal(nil, @obj.find {|x| false })