..
ou flip-flop est hérité de Perl qui l'a obtenu de AWK et sed dans * nix. C'est très puissant, mais dans votre usage particulier c'est assez obscur et pas un bon choix pour la logique que vous voulez, surtout dans Ruby. Au lieu d'utiliser:
(1..10).each {|x| puts x if (3..5) === x }
qui délivre en sortie:
3
4
5
Cela dit, il est extrêmement puissant quand vous avez besoin d'extraire une gamme de lignes à partir d'un fichier:
File.foreach('/usr/share/dict/propernames') { |li| puts li if ($. == 5 .. $. == 7) }
qui sort:
Agatha
Ahmed
Ahmet
Pe rl permet une expression encore plus laconique en utilisant uniquement les numéros de ligne de la ligne actuellement lue (AKA $.
) mais Ruby ne supporte pas cela.
Il y a aussi la possibilité d'utiliser des expressions régulières, qui se comportent de la même que la comparaison précédente:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (li[/^Wa/] .. li[/^We/]) }
qui sort:
Wade
Walt
Walter
Warren
Wayne
Wendell
Parce que le travail regex, il est possible de créer un motif complexe récupérer les lignes d'un fichier basé sur des correspondances. En tant que premier, puis déclencheur du second modèle, les lignes sont capturées. Si, plus tard dans le fichier, une autre ligne déclenche le premier motif, la capture se produira à nouveau jusqu'à ce que le second motif corresponde. Il est merveilleusement puissant:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (
li[/^Am/] .. li[/^An/] or
li[/^Wa/] .. li[/^We/]
)
}
qui sort:
Amanda
Amarth
Amedeo
Ami
Amigo
Amir
Amos
Amy
Anatole
Wade
Walt
Walter
Warren
Wayne
Wendell
Ou alternativement, pour nos amis parlant obscur de code:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (li[/^(?:Am|Wa)/] .. li[/^(?:An|We)/]) }
lien la documentation s'il vous plaît .. –
Vous avez répondu à votre propre question. 'et continuer à être vrai jusqu'à x == 5' – MurifoX
mais quand x devient 5, il est faux droit? Comment est-ce que 5 pouvait être imprimé? – bean