Un bloc est pas un lambda. Pour voir s'il y a un bloc, utilisez block_given?
.
Dans tous les cas, j'utiliserais "répond à l'appel" si et seulement si j'avais vraiment besoin de cette construction, que j'essaierais d'éviter. (Définir le contrat et faire l'appelant chargé d'invoquer correctement!)
(lambda {1}).respond_to? :call # => true
(1).respond_to? :call # => false
Je crois que cette forme de structurelle (aka canard) dactylographie est plus en ligne avec Ruby que frappe Nominatif avec « est a "les relations.
Pour voir ce « est une » relation peut tenir (pour l'avenir jouer dans un bac à sable):
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
Bonne codage.
Très cool qu'il existe une méthode 'respond_to?'. Rend ces sortes de choses beaucoup plus faciles. – Automatico