set – Perl 6中的总方法和Bag变量的符号

前端之家收集整理的这篇文章主要介绍了set – Perl 6中的总方法和Bag变量的符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们可以使用 total方法来了解Bag中所有权重的总和.
> my $b = (1,2,1).Bag
Bag(1(2),2)
> $b.total
3

但是如果我们使用%sigil代替$for我们的Bag,我们会收到一条错误消息.

> my %b = (1,1).Bag
{1 => 2,2 => 1}
> %b.total
No such method 'total' for invocant of type 'Hash'. Did you mean 'cotan'?
  in block <unit> at <unknown file> line 1

如果%b在总计之前明确转换为Bag,则可以:

> %b.Bag.total
3

问题:我曾经认为使用Set,Bag,SetHash等,使用%sigil是可取的.我错了吗?

解决方法

绑定而不是分配
my %b := (1,1).Bag;
say %b.total

绑定(带:=)binds右侧直接到左侧.在这种情况下,执行Associative角色的值将绑定到%b.

或分配到一个袋子

将(带= =)assigns(副本)值从右侧分配到左侧的容器中.

您可以按照以下方式在首次绑定到Bag后进行分配.

在赋值之前,我的声明符会将一个合适的容器绑定到声明的变量.默认情况下,如果变量具有%sigil,则它将是Hash容器.

但是您可以指定一个变量绑定到与其sigil兼容的其他类型的容器:

my %b is Bag = 1,1;
say %b.total

使用这个咒语你需要使用=因为,当遇到操作符时%b已经被绑定到一个Bag,现在你需要分配(复制)到Bag中.

这样你就可以简单地提供一个值列表(没有明确的键或Bag coercer / constructor),因为=是根据左边容器的需要来解释的,而Bag选择将RHS解释为= as密钥列表,其出现次数对其重要.

猜你在找的Perl相关文章