2017-01-04 11 views
5

Czy można zastosować skrzyżowanie, aby dopasować dowolne wartości w połączeniu? Chcę dopasować dowolną wartość w tablicy. Jaki jest właściwy sposób na zrobienie tego?perl6 Czy używanie skrzyżowań w dopasowywaniu jest możliwe?

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」 
> 

Dzięki!

Odpowiedz

8

Połączenia nie mają być interpolowane na wyrazy regularne. Są one przeznaczone do pracy w normalnych Perl 6 wyrażeń, szczególnie z operatorów porównania (takich jak eq):

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

pasują do każdej z wartości tablicy w regex, wystarczy wpisać nazwę zmienna tablicowa (zaczynająca się od @) w regex. Domyślnie jest to interpretowane jako | naprzemiennie („najdłuższy mecz”), ale można również określić, że jest to || naprzemienne („Pierwszy mecz”):

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

dziękuję ponownie SML !! Myślę, że Perl6 jest naprawdę fajny; Robię rzeczy szybciej z perl6 niż z rakietą. – lisprogtor

Powiązane problemy