2017-01-04 7 views
5

ジャンクションを使用して、ジャンクション内の任意の値に一致させることはできますか?私は配列内の値のいずれかと一致させたい。それを行う正しい方法は何ですか?perl6マッチングにジャンクションを使用していますか?

lisprog$ perl6 
To exit type 'exit' or '^D' 
> my @a=<a b c> 
[a b c] 
> any(@a) 
any(a, b, c) 
> my $x=any(@a) 
any(a, b, c) 
> my $y = "a 1" 
a 1 
> say $y ~~ m/ $x/
False 
> say $y ~~ m/ "$x"/
False 
> my $x = any(@a).Str 
any("a", "b", "c") 
> say $y ~~ m/ $x/
False 
> say $y ~~ m/ || $x/
False 
> say $y ~~ m/ || @a/
「a」 
> 

ありがとう!!

答えて

8

接合部は正規表現に内挿されることを意味しません。正規表現の配列の値のいずれかと一致するには、単にの名前を書く

my @a = <x y z>; 
say "y" eq any(@a); # any(False, True, False) 
say so "y" eq any(@a); # True 

:これらは、特に比較演算子(例えばeqなど)と、通常のPerl 6の式で使用されることを意味しています正規表現内の配列変数(@で始まる)。デフォルトでは、これは|交替(「最長一致」)と解釈されていますが、それは||交代(「最初の一致」)であることを指定することができます。

my @a = <foo bar barkeep>; 
say "barkeeper" ~~/@a /;  # 「barkeep」 
say "barkeeper" ~~/|| @a /; # 「bar」 
+0

もう一度SMLSありがとう!!私はPerl6が本当にクールだと思う。私は、ラケットよりもperl6で処理が速くなるようにしています。 – lisprogtor

関連する問題