..
или триггер наследуется от Perl, который получил его от AWK и sed в * nix. Он очень мощный, но в вашем конкретном использовании он довольно неясен и не является хорошим выбором для логики, которую вы хотите, особенно в Ruby. Вместо того, чтобы использовать:
(1..10).each {|x| puts x if (3..5) === x }
Какие выходы:
3
4
5
Тем не менее, это очень мощный, когда вам нужно извлечь диапазон строк из файла:
File.foreach('/usr/share/dict/propernames') { |li| puts li if ($. == 5 .. $. == 7) }
который выводит:
Agatha
Ahmed
Ahmet
Perl allow s еще более тонкое выражение, использующее только номера строк текущей строки (AKA $.
), но Ruby не поддерживает это.
Там также возможность использования регулярных выражений, которые ведут себя так же, как и предыдущие сравнения:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (li[/^Wa/] .. li[/^We/]) }
который выводит:
Wade
Walt
Walter
Warren
Wayne
Wendell
Поскольку регулярное выражение работы, можно создать сложный рисунок на извлекать строки из файла на основе совпадений. В качестве первого, затем запускается второй шаблон, линии. Если позже в файле другая строка запускает первый шаблон, то захват будет снова выполняться до тех пор, пока не будет найден второй шаблон. Это удивительно мощное:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (
li[/^Am/] .. li[/^An/] or
li[/^Wa/] .. li[/^We/]
)
}
Каких выходы:
Amanda
Amarth
Amedeo
Ami
Amigo
Amir
Amos
Amy
Anatole
Wade
Walt
Walter
Warren
Wayne
Wendell
Или поочередно, для наших неясных кодов говорящих друзей:
File.foreach('/usr/share/dict/propernames') { |li| puts li if (li[/^(?:Am|Wa)/] .. li[/^(?:An|We)/]) }
ссылку на документацию пожалуйста. –
Вы ответили на свой вопрос. 'и продолжайте оставаться до тех пор, пока x == 5' – MurifoX
, но когда x станет 5, это неверно? как можно было напечатать тогда? – bean