2017-01-04 29 views
5

Bir bağlantıdaki herhangi bir değerle eşleştirmek için birleşim kullanmak mümkün mü? Bir dizideki değerlerden herhangi birini eşleştirmek istiyorum. Bunu yapmanın doğru yolu nedir?perl6 Mümkün olan eşleşmelerde kavşaklar kullanılıyor mu?

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

Teşekkürler!

cevap

8

Kavşaklar, normal ifadelerle enterpolasyon amacı taşımamaktadır. Bir düzenli ifade bir dizinin değerlerden herhangi birine eşleştirmek için, sadece adını yazın

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

: Bunlar özellikle karşılaştırma operatörleri (örneğin eq gibi) sahip olan normal, Perl 6 ifadelerde kullanılmak üzere tasarlanmıştır konum regex'te dizi değişkeni (@ ile başlayan). Varsayılan olarak, bu bir | değişmesinde ("en uzun maçı") olarak yorumlanır, ama aynı zamanda bir || almaşını ("birinci maç") olarak belirtebilirsiniz:

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

tekrar SML'ler ederiz !! Perl6'nın gerçekten harika olduğunu düşünüyorum; Perl6 ile işlerin daha hızlı yapılmasını sağladım. – lisprogtor