다음 코드는 MooseX::AttributeHelpers과 함께 제공되는 기능을 사용하는지 여부 만 다른 두 클래스 (DeckA
및 DeckB
)를 정의합니다. DeckB
에 대해 Moose가 생성 한 getters는 내가 예상 한 것이 아닙니다. 이것은 버그입니까, 아니면 내가 어떻게 MooseX::AttributeHelpers과 MooseX::FollowPBP이 상호 작용해야하는지 오해하고 있습니까?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
당신은이 대답에 나를 때리면 ... 데이브 롤 스키 (Dave Rolsky)를 저주하십시오. CURSE YOUUUUU – perigrin