2017-07-02 1 views
9

Die < > hat Vorrang vor dem Begriff. Hier ist die example from the docs:Haben alle Zitationskonstrukte von Perl 6 Vorrang vor Begriffen?

say <a b c>[1]; 

Ich dachte, die gleiche Priorität zu allen der Angabe Betreiber gelten. Dies funktioniert:

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

Diese interpoliert $string und schafft allomorphes (in diesem Fall ein ComplexStr):

(5+8i) 

Aber, wenn ich zu indizieren wie das Beispiel aus der Dokumentation versuchen, es funktioniert nicht kompilieren:

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

Ich bin nicht ganz sicher, was Perl 6 denkt, passiert hier. Vielleicht ist es denkt es ein hyperoperator ist:

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

ich die Variable überspringen kann:

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

Aber das ist ein anderer Fehler, der nicht die Schließung Anführungszeichen finden:

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

ein anderer Datenpunkt: '<<"$string">> [0]' funktioniert wie erwartet – Christoph

+0

In der Tat. Die '' 'sind nur ein weiterer Weg, um zu verhindern, dass der Parser in die >>.' Cul-de-sac gelangt. –

Antwort

7

Ich denke, Dies garantiert eine Rakudobug-E-Mail. Ich denke, der Parser wird verwirrt, wenn er versucht, ihn als hyper (aka) zu interpretieren. Die folgende Problemumgehung scheint dies zu bestätigen:

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

Ihre OCD gerecht zu werden, könnte man wahrscheinlich einen Raum setzt auch vor $string.

Und ja, Leerzeichen nicht sinnlos in Perl 6.

+0

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

6

Jonathan die Antwort in Reaktion auf RT #131695 hat.

Die >>[] ist eine postfix operator, um eine Liste zu indizieren, also versucht sie, sie als solche zu verwenden. Dies ist ein beabsichtigtes Verhalten. Fair genug, obwohl ich denke, dass der Parser hier für normale Code-Affen ein bisschen zu schlau ist.

+3

Der Parser ist nicht so clever, sondern sehr wörtlich: Irgendwann hat sich die Regel für die qq-Interpolation von Variablen zu etwas entwickelt, das sehr ähnlich ist wie "interpoliere jede beliebige Variable, plus Postfix-Operatoren, die von einem Postcircumfix beendet werden". Praktisch, wenn Sie "$ foo.uc()" oder was auch immer tun möchten. Aber auch eine Quelle von Denkern. Dies beißt mich am häufigsten in HTML-Strings wie "$ stuff ...", wo der " Teil endet wird als Postcircumfix geparst. –

Verwandte Themen