В следующем коде определяются два класса (DeckA
и DeckB
), которые отличаются только тем, используют ли они функции, которые поставляются с MooseX::AttributeHelpers. Геттеры, созданные Moose для DeckB
, не являются тем, что я ожидал. Является ли это ошибкой или я не понимаю, как должны взаимодействовать MooseX::AttributeHelpers и MooseX::FollowPBP?Do MooseX :: AttributeHelpers и MooseX :: FollowPBP взаимодействуют правильно?
Мое обходное решение в настоящее время состояло в том, чтобы избежать использования аргумента is
в таких ситуациях и вместо этого объявить reader
и writer
при необходимости.
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";
}
}
Выход:
DeckA
cards: no
get_cards: yes
get_all_cards: no
DeckB
cards: yes # Not what I expected.
get_cards: no # Not what I expected.
get_all_cards: yes
вы избили меня до этого ответа ... проклинайте вас, Дэйв Ролски ... CURSE YOUUUUU – perigrin