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右侧直接到左侧.在这种情况下,执行 或分配到一个袋子 将(带= =)assigns(副本)值从右侧分配到左侧的容器中. 您可以按照以下方式在首次绑定到Bag后进行分配. 在赋值之前,我的声明符会将一个合适的容器绑定到声明的变量.默认情况下,如果变量具有%sigil,则它将是Hash容器. 但是您可以指定一个变量绑定到与其sigil兼容的其他类型的容器: my %b is Bag = 1,1; say %b.total 使用这个咒语你需要使用=因为,当遇到操作符时%b已经被绑定到一个Bag,现在你需要分配(复制)到Bag中. 这样你就可以简单地提供一个值列表(没有明确的键或Bag coercer / constructor),因为=是根据左边容器的需要来解释的,而Bag选择将RHS解释为= as密钥列表,其出现次数对其重要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |