從在perlsyn的Smart matching in detail部分:是~~一個短路操作員?
智能匹配操作符 短路只要有可能。
是否~~
什麼共同點與short circuit operators(&&
,||
等)?
從在perlsyn的Smart matching in detail部分:是~~一個短路操作員?
智能匹配操作符 短路只要有可能。
是否~~
什麼共同點與short circuit operators(&&
,||
等)?
這裏短路的含義是評估將在布爾結果建立後立即停止。
perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ -), $_ ~~ @x ? q(ja) : q(nein) }"
對於輸入b
,Perl將不看下面的@x
b
的元素。另一方面,您引用的文檔內置的grep
將處理整個列表,即使所需的所有內容都可能是布爾值。
perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ -), scalar grep $_, @x ? q(ja) : q(nein) }"
是的,在這個意義上,當一個參數是一個數組或哈希,~~
將只檢查元素,直到可以肯定的結果的。
例如,在sub x { ... }; my %h; ...; %h ~~ \&x
中,智能匹配只有在x
對%h
的所有密鑰返回true時才返回true;如果一個調用返回false,則匹配可以立即返回false而不檢查其餘的鍵。這與&&
運營商類似。
另一方面,在/foo/ ~~ %h
中,如果智能匹配只找到與正則表達式匹配的一個鍵,則返回true;這與||
類似。