< >
有术语优先权。这是example from the docs:
say <a b c>[1];
我认为相同的优先级适用于所有引用运算符。这有效:
my $string = '5+8i';
my $number = <<$string>>;
say $number;
这会插入$string
并创建allomorphes(在本例中为ComplexStr):
(5+8i)
但是,如果我尝试将其编入索引,就像文档中的示例一样,它就不会编译:
my $string = '5+8i';
my $number = <<$string>>[0];
say $number;
我不太确定Perl 6在这里发生了什么。也许它认为它是一个超级高手:
===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
我可以跳过变量:
my $string = '5+8i';
say <<$string>>[0];
但这是一个不能找到结束语的错误:
===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
答案 0 :(得分:7)
我认为这需要一封rakudobug电子邮件。我认为解析器在尝试将其解释为hyper
(又名>>.method
)时感到困惑。以下解决方法似乎证实了这一点:
my $string = '5+8i';
my $number = <<$string >>[0]; # note space before >>
say $number;
为了满足你的强迫症,你可能还需要在$string
之前加一个空格。
是的,在Perl 6中,空格并没有意义。
答案 1 :(得分:7)
Jonathan回答RT #131695答案。
>>[]
是一个postfix operator索引列表,所以它会尝试使用它。这是预期的行为。很公平,虽然我认为解析器对于常规代码猴来说太聪明了。