raku 中的数据类型 bag

数据类型 Bag 是一种 Perl 5 中没有的新的数据类型。

它可以被认为是一个容器,它一方面知道它里面有多少个单独的元素,另一方面可以说有多少种不同类型的商品。您可以用不同的方式描述此类型:Bag 是一个哈希,默认情况下,您添加的键的值为1。我们来看看例子。

把一个 1 放进 bag 里,看看 perl 的输出:

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

该程序打印以下输出:

(1=>1).Bag

也就是说,我们有一个 1。

如果你把另一个数字也放进 bag 里面:

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

现在有一个 1 和一个 2:

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

好的,如果你添加另一个 1 呢?

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

现在有两个 1:

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

让我们稍微离题一下:所有显示的例子都可以把括号去掉:

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

比较典型的是,bag 不止能存储数字,还可以存储字符串,例如:

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);