No estoy haciendo sentido de la siguiente comportamiento (véase también in this SO thread):Ceder en un bloque anónimo
def def_test
puts 'def_test.in'
yield if block_given?
puts 'def_test.out'
end
def_test do
puts 'def_test ok'
end
block_test = proc do |&block|
puts 'block_test.in'
block.call if block
puts 'block_test.out'
end
block_test.call do
puts 'block_test'
end
proc_test = proc do
puts 'proc_test.in'
yield if block_given?
puts 'proc_test.out'
end
proc_test.call do
puts 'proc_test ok'
end
Salida:
def_test.in
def_test ok
def_test.out
block_test.in
block_test ok
block_test.out
proc_test.in
proc_test.out
no me importa tener que recurrir a declarar explícitamente el & variable de bloque y llamarlo directamente, pero lo ideal sería que me gustaría tener algún sentido de por qué termino necesitando.
Relacionados: http://stackoverflow.com/questions/6628936/extinguendo-una-clase-método-en-un-módulo –