J'ai tendance à écrire quelque chose comme ça comme:
while(my($first, $second) = map { ... } 1..2) {
...
}
Vous ne pouvez pas aimer cette syntaxe parce que vous n'êtes pas habitué à faire les choses de cette façon, mais il fait suite à une des règles de couple que je pense rendre le code plus facile :
- Je ne tape pas la même chose deux fois
- -je céder à toutes les variables à la fois
- J'utilise la carte pour générer la liste quand je dois courir somethin g plus d'une fois.
- Je n'utilise pas les opérateurs logiques gratuitement.
Cependant, il y a un autre problème. Vous devez déterminer ce que vous testez réellement dans la condition while
, et le rendre apparent au programmeur suivant. Je ne sais pas pourquoi vous avez deux choses dans cette condition. Est-ce correct de lire l'itérateur s'il n'y a qu'une seule chose (c'est-à-dire ce qui arrive à l'homme étrange non traité)?
Une meilleure solution serait de montrer ce que vous essayez de faire sans montrer la mécanique.Ne sachant pas quoi que ce soit au sujet de votre iterator, je pourrais suggérer que vous décorez avec une autre méthode qui retourne deux éléments (ou peut-être la liste vide si elle est à la fin):
while(my($first, $second) = $iterator->read_two) {
...;
}
Si cela ne rend pas la situation clair, décorer avec une méthode pour poser une question particulière:
while($iterator->two_things_left) {
my($first, $second) = $iterator->read_two;
...;
}
Vous n'avez pas dit ce que vous essayez de faire. Si votre objectif est de tirer deux éléments d'un itérateur à la fois, la sortie de la boucle s'il n'y a pas au moins deux éléments restant ou si l'un des éléments a une fausse valeur, cela fonctionne très bien et vos variables 'first' $ et '$ second' aura la portée appropriée. – Dan
ce que tu fais avec && pour attraper la fin de la iterator? –