mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 22:14:37 +02:00
Implement Enumerator::Yielder#to_proc
A Yielder object can now be directly passed to another method as a block argument. ```ruby enum = Enumerator.new { |y| Dir.glob("*.rb") { |file| File.open(file) { |f| f.each_line(&y) } } } ``` git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7d9664953b
commit
c2d3b8dfb4
2 changed files with 40 additions and 2 deletions
|
@ -493,6 +493,21 @@ class TestEnumerator < Test::Unit::TestCase
|
|||
assert_equal([1, 2, 3], y.yield(2, 3))
|
||||
|
||||
assert_raise(LocalJumpError) { Enumerator::Yielder.new }
|
||||
|
||||
# to_proc (explicit)
|
||||
a = []
|
||||
y = Enumerator::Yielder.new {|x| a << x }
|
||||
b = y.to_proc
|
||||
assert_kind_of(Proc, b)
|
||||
assert_equal([1], b.call(1))
|
||||
assert_equal([1], a)
|
||||
|
||||
# to_proc (implicit)
|
||||
e = Enumerator.new { |y|
|
||||
assert_kind_of(Enumerator::Yielder, y)
|
||||
[1, 2, 3].each(&y)
|
||||
}
|
||||
assert_equal([1, 2, 3], e.to_a)
|
||||
end
|
||||
|
||||
def test_size
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue