Peut-être
Oui si vous parlez de _IRM ,_ et la question est : " L'itérateur va-t-il parcourir mes nouveaux éléments ? ".
Si vous parlez de Ruby en tant que langage, " peut-être ". Comme il n'y a pas de spécification, l'IRM sert d'implémentation de référence.
Cela dit, cela semble être quelque chose qui serait spécifique à l'implémentation, en partie parce qu'exiger un comportement spécifique imposerait une contrainte aux implémentations sans bénéfice clair, mais avec certains compromis de performance.
C'est aussi un peu _impératif ,_ donc ce n'est peut-être pas "la manière Ruby", qui penche plus vers _les styles fonctionnels ._
Voici comment je pense qu'un bon programme Ruby devrait écrire ce genre de boucle. Cette expression renvoie l'ancien tableau a sauf s'il change, auquel cas elle crée un nouveau tableau dans un style fonctionnel afin qu'il n'y ait jamais de doute sur ce que sera le résultat...
>> a = [1, 2, 3]
=> [1, 2, 3]
>> a.inject(a) { |m, e| e < 99 ? m + [99] : m }
=> [1, 2, 3, 99, 99, 99]
Une expression semi-fonctionnelle plus rapide (si beaucoup de nouveaux éléments sont ajoutés) serait :
t = a.inject(a.dup) { |m, e| e < 99 ? m << 99 : m }