結論。できる。
ブロックを取るメソッドの Enumerator化は、enum_for
やto_enum
でできる。
def foo
(1..10).each { yield(_1) }
end
enum_for(:foo).map { _1 * 2 }
#=>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
では、ブロックを取る Procオブジェクトは、Enumerator::Yielder#to_proc
を使って Enumerator化できるのである。
foo = ->(&bk){
(1..10).each { bk.call(_1) }
}
Enumerator.new { |y| foo.(&y) }.map { _1 * 2 }
#=>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
※参考
https://qiita.com/obelisk68/items/8518159d1eba55397a9a
https://docs.ruby-lang.org/ja/latest/method/Enumerator=3a=3aYielder/i/to_proc.html