
массивы
@list.method - применяет метод ко всему массиву, а не к каждому его элементу. @list».method - применяет метод не ко всему массиву, а к каждому его элементу, возвращая массив полученных результатов.
| | #!/usr/bin/perl6
my @list=1..5;
@list.sin.say;
'--------'.say;
@list».sin.say; | | -0.958924274663138
--------
0.841470984807897 0.909297426825682 0.141120008059867 -0.756802495307928 -0.958924274663138 |
Bene. Однако так и хочется подправить скрипт, чтобы он выводил значения синусов столбиком. Нет ничего проще.| | #!/usr/bin/perl6
my @list=1..5;
@list.sin.say;
'--------'.say;
@list».sin».say; | | -0.958924274663138
--------
0.841470984807897
0.141120008059867
0.909297426825682
-0.756802495307928
-0.958924274663138 |
Symbolum » fructuosum est. И полезное наблюдение - @list.sin.say выводит синус последнего элемента массива. # mutatio postrema: 8 Sep 2010
» или >> очень хорош в плане разгрузки программы от циклов. Допустим, у нас есть массив, с каждым элементом которого надо проделать какие-то сложные вещи.
| | #!/usr/bin/perl6
my @list=<abc def ghi>;
@list».&double.say;
sub double($in) { # в субрутину заключаем "сложную вещь"
return "$in $in ";
} | | abc abc def def ghi ghi |
Теперь основная часть программы избавится от множества for {} Наша программа продублировала слова. say успешно вывела массив. И опять нас не устраивает, что всё в одну строку. Чуть подправим...| | #!/usr/bin/perl6
my @list=<abc def ghi>;
@list».&double».say;
sub double($in) { # в субрутину заключаем "сложную вещь"
return "$in $in ";
} | | def def
abc abc
ghi ghi |
То есть после названия субрутины тоже можно ставить волшебный » Не знаю почему, но надо писать именно '&double' при вызове, а не 'double' (что приводит к ошибке "метод не найден"). # mutatio postrema: 8 Sep 2010
Если надо, выбрать из массива какую-то его часть по номерам элементов, то можно так:
| | #!/usr/bin/perl6
my @list='a' .. 'z';
my @list2=@list[5,6,8,11];
@list2».say; | | l
g
f
i |
Bene. # mutatio postrema: 8 Sep 2010
Если использовать массив или список как число, тогда в качестве оного берется количество элементов.
| | #!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass == 4;
say @mass + 10;
say <pedis pulex acarus cimex> == 4;
say <pedis pulex acarus cimex> + 10; | | Bool::True
14
Bool::True
14 |
Очевидно, что надо опасаться риска, что случайно можно обратиться с другим контекстом.| | #!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass eq 4; | | Bool::False |
Для явного вызова количества элементов массива есть оператор elems.| | #!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass.elems;
say <pedis pulex acarus cimex>.elems; | | 4
4 |
N.B. Пожалуй, лучше не рисковать и использовать elems. # mutatio postrema: 8 Sep 2010
|