2
#!perl6
use v6;

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

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

my_function( $list );

首先我尝试了 perl5 风格,但没有奏效:

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

我怎么能在 perl6 中做到这一点?

4

3 回答 3

8

您不会在 Perl 6 中取消引用这样的变量。只需使用for $list

但这可能不会做你想做的事。'a'..'f'在 Perl 6 中不构造列表,而是构造一个名为Range. 你可以用say $list.WHAT. 要将其转换为列表并遍历每个元素,您可以使用for $list.list

于 2011-02-17T16:53:45.157 回答
4

这些应该工作:

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

由于$list是标量,for $list因此只会遍历单个项目。

于 2011-02-17T17:39:33.703 回答
4

现在,Rakudo 2015.02 工作正常。

您最好将@变量名的 twigil 用作数组。

Perl 6 是上下文相关的语言,所以如果你想让数组充当“真正的数组”,你最好给它一个合适的名字。

#!perl6
use v6;

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

for @list -> $e { $e.say };
于 2015-04-22T02:53:09.710 回答