Я пытаюсь расширить Set :: Object, чтобы разрешить проверку ограничения типа при вставке объектов. Мой класс до сих пор выглядит так:
package My::Set::Object;
use strict;
use warnings;
use Moose;
use MooseX::NonMoose;
extends 'Set::Object';
has type => (is => 'ro', isa => 'Str', required => 1);
before [ qw(insert invert intersection union) ] => sub {
my ($self,$list) = @_;
for (@$list) {
confess "Only ",$self->type," objects are allowed " unless $_->does($self->type);
}
};
no Moose;
__PACKAGE__->meta->make_immutable;
К сожалению, похоже, что аргументы конструкции передаются и в Set :: Object, когда я делаю следующее примерное построение объекта
my $set = My::Set::Object->new(type => 'Foo::Bar');
После распечатывания содержимого набора я обнаружил, что "type" и "Foo :: Bar" являются членами набора.
Как я могу это исправить? Или, может быть, есть более простой способ сделать это?