2012-03-28 2 views

Répondre

35

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.

+0

Très cool qu'il existe une méthode 'respond_to?'. Rend ces sortes de choses beaucoup plus faciles. – Automatico

Questions connexes