加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:42:28 所属栏目:大数据 来源:网络整理
导读:我们可以使用 total 方法来了解Bag中所有权重的总和. my $b = (1,2,1).BagBag(1(2),2) $b.total3 但是如果我们使用%sigil代替$for我们的Bag,我们会收到一条错误消息. my %b = (1,1).Bag{1 = 2,2 = 1} %b.totalNo such method 'total' for invocant of type
我们可以使用 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密钥列表,其出现次数对其重要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读