Мне интересно, можно ли передать блок в Proc. Просто проходя блок Proc.call
не работает:Могу ли я передать блок Proc?
foo = Proc.new {
yield
}
foo.call {
puts "test"
}
Результаты в:
LocalJumpError: no block given (yield)
То же самое происходит с лямбды. Однако это делает работу с объектами метод:
class Foo
def bar
yield
end
end
bar = Foo.new.method :bar
bar.call { puts "Success!" }
Результаты в:
Success!
Странным является то, что она все еще работает после преобразования объекта метода в процедурный:
bar.to_proc.call { puts "Success!" }
Результаты:
Success!
Так почему же Proc, который был сделан из блока, не принимает блоки, но Proc, который изначально был методом? Можно ли создавать Procs из блоков, которые принимают блоки?
Возможный дубликат [Можно ли оценить блок внутри Proc?] (Http://stackoverflow.com/questions/17818160/can-i-evaluate-a-block-inside-a-proc) –
Все еще открыт связанный с этим вопрос: могут ли методы, которые создаются из блоков, которые дают? –