Ruby: убрать блок из блока?
Возможно ли для lambda
, proc
, method
или другого типа блока в ruby, чтобы уступить другому блоку?
что-то вроде...
a = lambda {
puts 'in a'
yield if block_given?
}
a.call { puts "in a block" }
это не работает... он просто создает
in a
=> nil
Есть ли способ получить блок для вызова блока?
Ответы
Ответ 1
Я не уверен, что вы можете это сделать, но что-то подобное:
В Ruby 1.8.6:
a = lambda { |my_proc|
puts 'in a'
my_proc.call
}
a.call(lambda { puts "in a block" })
В Ruby 1.9.1 вы можете иметь параметры блока
a = lambda { |&block|
puts 'in a'
block.call
}
a.call { puts "in a block" }
Ответ 2
Вы можете вызвать блок, похожий на yielding.
a = lambda {|&block| block.call if block}
a.call {print "hello"}
Обратите внимание, что
a.call
Не будет возвращена ошибка.