perl6 / rakudo: вопрос разыменования - PullRequest
1 голос
/ 17 февраля 2011
#!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?

Ответы [ 3 ]

7 голосов
/ 17 февраля 2011

Вы не разыменовываете переменные как это в Perl 6. Просто используйте for $list

Но это, вероятно, не будет делать то, что вы хотите сделать. 'a'..'f' не создает список в Perl 6, а скорее встроенный тип данных, называемый Range. Вы можете проверить это с помощью say $list.WHAT. Чтобы превратить его в список и выполнить итерацию по каждому элементу, вы должны использовать for $list.list

3 голосов
/ 17 февраля 2011

Это должно работать:

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

Поскольку $list является скаляром, for $list будет просто перебирать один элемент.

2 голосов
/ 22 апреля 2015

Теперь Rakudo 2015.02 работает нормально.

Вам лучше использовать @ в качестве twigil имени переменной как массива.

Perl 6 - это контекстно-зависимый язык, так что если вы хотитемассив действует как «истинный массив», вам лучше дать ему подходящее имя.

#!perl6
use v6;

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

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