Un bloque es no una lambda. Para ver si hay un bloque, use block_given?
.
En cualquier caso, usaría "responde a la llamada" si y solo si Realmente necesitaba esta construcción, que trataría de evitar. (Definir el contrato y hacer que la persona que llama responsable de invocar correctamente!)
(lambda {1}).respond_to? :call # => true
(1).respond_to? :call # => false
Creo que esta forma de estructural (también conocido como pato) Typing es más en línea con Ruby que tipificación nominativa con "es una "relación".
para ver lo que "es un" relaciones podría sostener (para el futuro de juego en una caja de arena):
RUBY_VERSION # => 1.9.2
(lambda {}).class # => Proc
(Proc.new {}).class # => Proc
def x (&p); p; end # note this "lifts" the block to a Proc
(x {}).class # => Proc
feliz de codificación.
Muy bueno que haya un método 'responder_a?'. Hace que este tipo de cosas sea mucho más fácil. – Automatico