La différence de comportement avec return
est à mon humble avis la différence la plus importante entre les 2. Je préfère aussi lambda car il est moins typé que Proc.new :-)
Dans Ruby 1.8, il existe des différences subtiles entre proc/lambda d'une part, et Proc.new
d'autre part.
La différence de comportement avec return
est à mon humble avis la différence la plus importante entre les 2. Je préfère aussi lambda car il est moins typé que Proc.new :-)
Pour développer la réponse d'Accordion Guy :
Remarquez que Proc.new
crée un proc out en passant un bloc. Je crois que lambda {...}
est analysé comme une sorte de littéral, plutôt qu'un appel de méthode qui passe un bloc. return
ing depuis l'intérieur d'un bloc attaché à un appel de méthode reviendra de la méthode, pas du bloc, et le cas Proc.new
en est un exemple en jeu.
(C'est 1.8. Je ne sais pas comment cela se traduit en 1.9.)
Proc est plus ancien, mais la sémantique de return est très contre-intuitive pour moi (du moins quand j'apprenais la langue) parce que :
Lambda est fonctionnellement plus sûr et plus facile à raisonner - je l'utilise toujours à la place de proc.
Une bonne façon de le voir est que les lambdas sont exécutés dans leur propre portée (comme s'il s'agissait d'un appel de méthode), tandis que les Procs peuvent être considérés comme exécutés en ligne avec la méthode appelante, au moins c'est un bon moyen de décider qui un à utiliser dans chaque cas.