~~ оператор короткого замыкания? - PullRequest
3 голосов
/ 06 мая 2011

Из раздела Интеллектуальное сопоставление в деталях * Секция 1002 * в perlsyn:

Оператор интеллектуального сопоставления по возможности замыкает накоротко.

Влияет ~~ имеет что-нибудь общее с операторами короткого замыкания (&&, || и т. д.)?

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

Да, в том смысле, что когда одним из аргументов является массив или хэш, ~~ будет проверять только элементы, пока не сможет быть уверен в результате.

Например, в sub x { ... }; my %h; ...; %h ~~ \&xинтеллектуальное совпадение возвращает true, только если x возвращает true для всех ключей %h;если один вызов возвращает false, совпадение может вернуть false сразу, не проверяя остальные ключи.Это похоже на оператор &&.

С другой стороны, в /foo/ ~~ %h интеллектуальное сопоставление может возвращать true, если находит только один ключ, соответствующий регулярному выражению;это похоже на ||.

4 голосов
/ 06 мая 2011

Смысл короткого замыкания здесь в том, что оценка остановится, как только будет установлен логический результат.

perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ - ), $_ ~~ @x ? q(ja) : q(nein) }"

Для ввода b Perl не будет рассматривать элементы, следующие за b в @x.С другой стороны, встроенная grep, на которую ссылается цитируемый вами документ, обработает весь список, даже если все, что нужно, может быть логическим.

perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @x ? q(ja) : q(nein) }"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...