
>>
Создадим небольшую структуру.
| | #!/usr/bin/perl6
my @str='белый' => 'albus', 'черный' => 'niger', 'серый' => 'canus',
'красный' => 'rubens', 'зеленый' => 'viridis', 'синий' => 'venetus';
for @str {.say} | | "белый" => "albus"
"черный" => "niger"
"серый" => "canus"
"красный" => "rubens"
"зеленый" => "viridis"
"синий" => "venetus" |
А как узнать какие ключи у хэша?| | #!/usr/bin/perl6
my @str='белый' => 'albus', 'черный' => 'niger', 'серый' => 'canus',
'красный' => 'rubens', 'зеленый' => 'viridis', 'синий' => 'venetus';
@str.keys.say;
@str>>.keys.say; # для этого есть >>, он же » | | 0 1 2 3 4 5
белый черный серый красный зеленый синий |
Насчёт символа » . Я работаю в текстовой консоли в виме. Для вставки » я добавил в ~/.vimrc строку: imap <F8> » Теперь в режиме вставки по нажатию F8 вставляется » # mutatio postrema: 3 Sep 2010
@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
Если мы вызовем %hash.say, то получим так:
| | #!/usr/bin/perl6
my %hash=<виноград uva вино vinum праздник festum похмелье crapula здоровье valetudo>;
%hash.say; | | ("виноград" => "uva", "вино" => "vinum", "праздник" => "festum", "похмелье" => "crapula", "здоровье" => "valetudo").hash |
А если добавить к %hash символ », тогда:| | #!/usr/bin/perl6
my %hash=<виноград uva вино vinum праздник festum похмелье crapula здоровье valetudo>;
%hash».say; | | valetudo
vinum
uva
festum
crapula |
Juvat. # mutatio postrema: 30 Jan 2012
Допустим, нам надо получить некую подвыборку из хэша по определенным ключам.
| | #!/usr/bin/perl6
my %hash=<a А b Б c В d Г e Д f Е g Ё h Ж i З j И k Й l К>;
%hash<a b c>».say; | | В
А
Б |
Здесь понятно. # mutatio postrema: 8 Sep 2010
|