2012-03-28 11 views

Respuesta

35

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.

+0

Muy bueno que haya un método 'responder_a?'. Hace que este tipo de cosas sea mucho más fácil. – Automatico

Cuestiones relacionadas