associative – Perl 6可以将%sigil用于除Hash之外的其他东西吗
发布时间:2020-12-15 21:55:19 所属栏目:大数据 来源:网络整理
导读:关于变量的Perl 6文档指出%sigil可以与执行 Associative角色的类型一起使用.它特别提到了 Pair,Hash和 Map.但是,我如何将 Pair变成带有%的变量? 如果我使用类型约束,我会得到一个奇怪的错误: my Pair %pair = Pair.new( 'a','b' )Type check failed in a
关于变量的Perl 6文档指出%sigil可以与执行
Associative角色的类型一起使用.它特别提到了
Pair,Hash和
Map.但是,我如何将
Pair变成带有%的变量?
如果我使用类型约束,我会得到一个奇怪的错误: > my Pair %pair = Pair.new( 'a','b' ) Type check failed in assignment to %pair; expected Pair but got Str ("b") in block <unit> at <unknown file> line 1 如果我分配没有类型约束我得到一个哈希: my %pair = Pair.new: 'a','b'; # Hash,not Pair 装订工程: my %pair := Pair.new: 'a','b'; # Pair 但是,如果我使用类型约束,我会得到另一个奇怪的错误: > my Pair %p2 := Pair.new: 'a','b'; Type check failed in binding; expected Associative[Pair] but got Pair (:a("b")) in block <unit> at <unknown file> line 1 同样的问题出现在Bag和Set上.用Map做,你最终得到了一个可变的Hash. 我认为这里有各种各样的问题,但也许%sigil并不像我所认为的那样多才多艺. 解决方法
您可以使用%sigiled容器来保存执行
Associative 角色的任何值.
正如您所发现的那样,您必须小心如何申报和分配. 在你的例子中,我的配对%对,你说要做一个可以保持配对值的哈希(不是一对)(%pair.WHAT =’哈希[配对]’) 试试这个: my Pair %p2 = mykey => Pair.new: 'a','b'; 这可能很好.通过约束值的类型,如果你说,你会得到一个错误 %p2<c> = 'd'; 因为你没有分配一对. 正如您所发现的那样,绑定以您认为应该的方式工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |