Реализовать требует на других Роль не работает? - PullRequest
2 голосов
/ 25 августа 2011

Моя первая роль следующая:

package AccBack::RTransaction;

use strict;
use warnings;

use Moose::Role;
use MooseX::Method::Signatures;

requires "_log";
requires "_config";

Моя вторая роль, которая реализует первую роль, следующая:

package AccBack::RAccounting;

use AccBack::RTransaction;

requires "_log";

has "_config"            => (
    isa         => "Accounting::Config",
    is          => "ro",
    lazy        => 1,
    default     => sub { return Accounting::Config->new(); }
);

has "fibu"              => (
    isa         => "Maybe[Accounting::Fibu]",
    is          => "rw",
    writer      => "setFibu",
    reader      => "getFibu",
    default     => undef,
);

with "AccBack::RTransaction";

Мой базовый класс следующийone:

package AccBack::Membership;

use AccBack::RAccounting;

has "_log"              => (
    isa         => "Log::Log4perl::Logger",
    is          => "ro",
    default     => sub { 
        return Log::Log4perl->get_logger("AccBack::Membership");
    }
);

has "mailMergeOption"  => (
    isa         => "Maybe[HashRef]",
    is          => "rw",
    writer      => "setMailMergeOption",
    reader      => "getMailMergeOption",
    default     => undef,
);

# Roles
with "AccBack::RAccounting";

Если я не хочу запускать свою программу, я получаю эту ошибку:

'AccBack :: RAccounting' требует реализации метода '_config'от AccBack :: Членство в C: / strawberry / perl / site / lib / Moose / Meta / Role / Application / ToCla

Я не понимаю, в чем проблема.Это то же самое, что и http://search.cpan.org/~doy/Moose-2.0203/lib/Moose/Cookbook/Roles/Recipe1.pod.

Кто-нибудь имеет представление о том, что я неправильно понял?

1 Ответ

5 голосов
/ 25 августа 2011

Это известная проблема, которая, будем надеяться, будет исправлена ​​в будущем.В то же время вы должны быть в состоянии удовлетворить требование во второй роли, добавив метод-заглушку, подобный следующему:

sub _config;
has "_config"            => (
    isa         => "Accounting::Config",
    is          => "ro",
    lazy        => 1,
    default     => sub { return Accounting::Config->new(); }
);

Подставка-заглушка выполнит требование, но не помешает ролиприменение.

...