38. Тип данных Bag в Perl 6

Тип данных Bag — новый тип данных, которого не было в Perl 5.

Его можно рассматривать как контейнер, который, с одной стороны, знает, сколько отдельных элементов в нем лежит, а с другой, может сказать, сколько там разных видов товара. Можно описать этот тип иначе: Bag это хеш, где по умолчанию значения для добавляемых ключей равны единице. Давайте разбираться на примерах.

Положим в сумку единицу и посмотрим, что про нее знает перл:

my $b1 = bag(1);
say $b1.perl;

Программа печатает такой ответ:

(1=>1).Bag

То есть, у нас есть одна единица.

А если положить еще двоечку:

my $b2 = bag(1, 2);
say $b2.perl;

Теперь там одна единица и одна двойка:

(1=>1,2=>1).Bag

ОК, а если добавить еще единицу?

my $b3 = bag(1, 2, 1);
say $b3.perl;

Теперь их две:

(1=>2,2=>1).Bag

Отвлечемся на секунду: все показанные примеры можно записать и без скобок:

my $b1 = bag 1;
my $b2 = bag 1, 2;
my $b3 = bag 1, 2, 1;

Более типично, наверное, хранить не числа, а строки, например:

my $cars = bag <green black blue black white>;

Что можно узнать про содержимое переменной $cars?

Во-первых, какие там присутствуют цвета:

say $cars.keys; # (white blue black green)

Во-вторых, сколько, собственно, разных цветов:

say $cars.elems; # 4

Либо сколько разных объектов:

say $cars.total; # 5

Наконец, при создании объектов типа Bag допустимо использовать синтаксис, аналогичный тому, как создаются хеши (правда, скобок и кавычек избежать не удастся):

my $cars2 = bag('green' => 1, 'black' => 2, 'blue' => 1, 'white' => 1);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *