Lorsqu’on lance le programme, on voit qu’il n’y a pas de différences:
Ok, donc block.call et yield c’est pareil ? Attends encore. Essayons
maintenant de supprimer le &block:
Toujours pas de différences ! Par contre, on ne pourra pas appeler
block.call sans avoir défini &block:
Le code ci-dessus donnera évidemment une erreur:
Toutes ces expérimentations nous ammène à une première conclusion: Les
blocs sont implicites, et donc ils sont partout. Ce que confirme, s’il en
est encore besoin, la session irb suivante:
Le contenu du bloc n’est jamais évalué, mais ne provoque pas d’erreur
lors de l’appel de foo.
Seconde conclusion, block.call et yield fonctionnent à l’identique.
Bien que je préfère block.call, qui me force à documenter la méthode
avec le &block.