For loop perl6/rakudo:取消引用问题

For loop perl6/rakudo:取消引用问题,for-loop,pass-by-reference,raku,rakudo,For Loop,Pass By Reference,Raku,Rakudo,首先,我尝试了perl5风格,但没有成功: #!perl6 use v6; my $list = 'a' .. 'f'; sub my_function( $list ) { for ^$list.elems -> $e { $list[$e].say; } } my_function( $list ); 如何在perl6中做到这一点?在perl6中,您不会像这样取消引用变量。只需对$list使用 但这肯定不会做你想做的事'a'..'f'在Perl

首先,我尝试了perl5风格,但没有成功:

#!perl6
use v6;

my $list = 'a' .. 'f';

sub my_function( $list ) {
    for ^$list.elems -> $e {
        $list[$e].say;
    }
}

my_function( $list );

如何在perl6中做到这一点?

在perl6中,您不会像这样取消引用变量。只需对$list使用

但这肯定不会做你想做的事
'a'..'f'
在Perl 6中不构造列表,而是一个名为
范围的内置数据类型。你可以用
比如$list.WHAT
来检查。要将它转换为一个列表并遍历每个元素,您可以对$list使用

for @$list -> $e {
    $e.say;
}
# Non-declarative sigil is missing its name at line ..., near "@$list -> "

由于
$list
是一个标量,因此$list
将只在单个项目上迭代。

现在,Rakudo 2015.02可以正常工作

最好使用
@
作为变量名的twigil作为数组

Perl 6是上下文敏感的语言,所以如果希望数组充当“真数组”,最好给它一个合适的名称

.say for @( $list );
.say for $list.list;
.say for $list.flat;

你到底想做什么?第一个代码块中的代码至少在Rakudo头上可以正常工作。第一个代码块应该是我在第二个代码块中想要什么的解释。@sid_com的perl5样式
for@$list->$e{$e.say;}
语法很好。Rakudo当时还没有实现它。
#!perl6
use v6;

my @list = 'a' .. 'f';

for @list -> $e { $e.say };