2017-07-02 37 views
9

< >'un önceliği vardır. İşte example from the docs var: Tüm Perl 6 alıntı yapıları öncelikli midir?

say <a b c>[1]; 

Aynı öncelik alıntı operatörlerin tümü için geçerli düşündüm. Bu çalışır:

my $string = '5+8i'; 
my $number = <<$string>>; 
say $number; 

Bu $string interpolates ve (bu durumda bir ComplexStr olarak) allomorphes oluşturur: Ben dokümanlardan örnekteki gibi indeksi çalışırsanız,

(5+8i) 

Ama öyle değil derleme:

my $string = '5+8i'; 
my $number = <<$string>>[0]; 
say $number; 

Burada Perl 6'nın neler olduğunu tam olarak bilmiyorum. Ben değişkeni atlayabilirsiniz

===SORRY!=== Error while compiling ... 
Cannot use variable $number in declaration to initialize itself 
at /Users/brian/Desktop/scratch.pl:6 
------>  say $⏏number; 
    expecting any of: 
     statement end 
     statement modifier 
     statement modifier loop 
    term 

: Belki de bu bir hyperoperator var düşünüyordur

my $string = '5+8i'; 
say <<$string>>[0]; 

Ama bu kapanış tırnak bulamıyorum farklı bir hata var:

===SORRY!=== Error while compiling ... 
Unable to parse expression in shell-quote words; couldn't find final '>>' 
at /Users/brian/Desktop/scratch.pl:8 
------> <BOL>⏏<EOL> 
    expecting any of: 
     statement end 
     statement modifier 
     statement modifier loop 
+1

bir veri noktası: Gerçekten de – Christoph

+0

beklendiği gibi '<<"$string"> [0] 'işleri>. '" '' >>. 'Cul-de-sac içine almak için ayrıştırıcı önlemek için sadece başka bir yoludur. –

cevap

7

bence Bu bir rakudobug e-postasını garanti eder. Ben ayrıştırıcı bir hyper (aka >>.method) olarak yorumlamaya çalışıyorum karıştı düşünüyorum. Aşağıdaki geçici çözüm bu doğrulayacak gibi görünüyor:

my $string = '5+8i'; 
my $number = <<$string >>[0]; # note space before >> 
say $number; 

sizin OKB karşılamak için, muhtemelen de $string önce boşluk koyabilirsiniz.

Ve evet, boşluk 6.

+0

https://rt.perl.org/Public/Bug/Display.html?id=131695 –

6

Jonathan RT #131695 cevaben cevabı vardır Perl anlamsız değildir. Böyle olarak kullanmaya çalışır böylece

>>[], bir postfix operator indeksine bir listedir. Bu amaçlanan davranış. Yeteri kadar adil olsa da, ayrıştırıcının düzenli kod maymunları için biraz fazla akıllı olduğunu düşünüyorum.

+3

Ayrıştırıcı, çok edebi fikirli olmak kadar akıllı değildir: Bir noktada, değişkenlerin qq interpolasyonu kuralı, "herhangi bir işaretli değişkeni, artı bir postcircumfix tarafından sonlandırılan, takip edebilecek herhangi bir postfix operatörü araya sokma" gibi bir şeye dönüşmüştür. . Kullanışlı Eğer "$ foo.uc()" ya da her neyse. Ama aynı zamanda thinkos kaynağı yapmak istediğinizde. Bu "$ şeyler ...", " bölüm uçları gibi HTML dizeleri en sık beni ısırır Postcircumfix olarak ayrıştırılıyor. –