Perl 6のwith orwith with without

1385 ワード

with orwith without

with文はifのようですが、真偽ではなく定義されているかどうかをテストするためです.さらに、givenに似た条件をテーマにしています.
with "abc".index("a") { .say } # print 0
elsifの代わりに、orwithは定義されているかどうかのテストをリンクするために使用されます.
# The below code says "Found a at 0"
my $s = "abc";
with   $s.index("a") { say "Found a at $_" }
orwith $s.index("b") { say "Found b at $_" }
orwith $s.index("c") { say "Found c at $_" }
else                 { say "Didn't find a, b or c" }
ifベースの従文とwithベースの従文を混合することができます.
# This says "Yes"
if 0 { say "No" } orwith Nil { say "No" } orwith 0 { say "Yes" };
unlessについては、withoutを使用して未定義(undefinedness)を検出できますが、else従文を追加することはできません.
my $answer = Any;
without $answer { warn "Got: $_" }
with文とwithout文の修飾子もあります.
my $answer = (Any, True).roll;
say 42 with $answer;
warn "undefined answer" without $answer;

テスト:
> my $answer = (Any, True).roll;
True
> say 42 with $answer;
42
> my $answer = (Any, True).roll;
(Any)
> say 42 with $answer;
()