For loop perl6/rakudo:取消引用问题
首先,我尝试了perl5风格,但没有成功: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
#!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 };