perl – MooseX :: AttributeHelpers和MooseX :: FollowPBP是否正确交互?

perl – MooseX :: AttributeHelpers和MooseX :: FollowPBP是否正确交互?,第1张

概述下面的代码定义了两个类(DeckA和DeckB),它们的区别仅在于它们是否使用 MooseX::AttributeHelpers附带的功能.Moose为DeckB生成的getter不是我所期望的.这是一个错误还是我误解了 MooseX::AttributeHelpers和 MooseX::FollowPBP应该如何互动? 我现在的解决方法是避免在这种情况下使用is参数,而是根据需要声明读者和编写者 下面的代码定义了两个类(DeckA和DeckB),它们的区别仅在于它们是否使用 MooseX::AttributeHelpers附带的功能.Moose为DeckB生成的getter不是我所期望的.这是一个错误还是我误解了 MooseX::AttributeHelpers和 MooseX::FollowPBP应该如何互动?

我现在的解决方法是避免在这种情况下使用is参数,而是根据需要声明读者和编写者.

use strict;use warnings;my %moose_args = (    isa     => 'ArrayRef[Str]',is      => 'ro',default => sub {[]},);my %moose_attr_helper_args = (    Metaclass => 'Collection::Array',provIDes => {        elements => 'get_all_cards',},);package DeckA;use Moose;use MooseX::FollowPBP;use MooseX::AttributeHelpers;has 'cards' => (%moose_args);package DeckB;use Moose;use MooseX::FollowPBP;use MooseX::AttributeHelpers;has 'cards' => (%moose_args,%moose_attr_helper_args);package main;for my $class (qw(DeckA DeckB)){    my $deck = $class->new;    print "\n$class\n";    for my $method ( qw(cards get_cards get_all_cards) ){        print "$method: ",$deck->can($method) ? 'yes' : 'no',"\n";    }}

输出:

DeckAcards: noget_cards: yesget_all_cards: noDeckBcards: yes          # Not what I expected.get_cards: no       # Not what I expected.get_all_cards: yes
解决方法 当您使用MX :: AH的元类选项时,它们不起作用.

然而,最新的Moose已经集成了对原生助手的支持,并略微调整了API.此版本使用traits(应用于属性的角色),它应该可以正常使用MX :: FollowPBP.

总结

以上是内存溢出为你收集整理的perl – MooseX :: AttributeHelpers和MooseX :: FollowPBP是否正确交互?全部内容,希望文章能够帮你解决perl – MooseX :: AttributeHelpers和MooseX :: FollowPBP是否正确交互?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1213435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存