Un blocco è non un lambda. Per vedere se c'è un blocco utilizzare block_given?
.
In ogni caso, utilizzerei "risponde per chiamare" se e solo se avevo davvero bisogno di questo costrutto, che avrei cercato di evitare. (Definire il contratto e fare il chiamante responsabile per invocare correttamente!)
(lambda {1}).respond_to? :call # => true
(1).respond_to? :call # => false
Credo che questa forma di strutturale (aka anatra) la tipizzazione è più in linea con Ruby di tipizzazione nominativo con "è una "relazione.
Per vedere ciò che "è un" relazioni potrebbe contenere (per il futuro di gioco in una sandbox):
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
Felice di codifica.
fonte
2012-03-28 00:33:31
Molto interessante il fatto che esiste un metodo 'respond_to?'. Rende molto più semplice questo tipo di cose. – Automatico