J'ai des difficultés avec la méthode BUILD
en MooseX::Declare. Si je dis:Quelle est la bonne façon de créer une méthode BUILD dans MooseX :: Declare?
#!/usr/bin/perl
use MooseX::Declare;
class Foo {
has foo => (is => "rw", isa => "Str", default => "foo");
method BUILD {
print "I was called\n";
}
}
Foo->new;
Je reçois le texte suivant moins utile message d'erreur:
Reference found where even-sized list expected at /Users/cowens/perl5/lib/perl5/MooseX/Method/Signatures/Meta/Method.pm line 335.
Validation failed for 'MooseX::Types::Structured::Tuple[MooseX::Types::Structured::Tuple[Object],MooseX::Types::Structured::Dict[]]' failed with value [ [ Foo=HASH(0x804b20) ], { HASH(0x8049e0) => undef } ], Internal Validation Error is: Validation failed for 'MooseX::Types::Structured::Dict[]' failed with value { HASH(0x8049e0) => undef } at /Users/cowens/perl5/lib/perl5/MooseX/Method/Signatures/Meta/Method.pm line 365
MooseX::Method::Signatures::Meta::Method::validate('MooseX::Method::Signatures::Meta::Method=HASH(0xb8aab0)', 'ARRAY(0xb8ab30)') called at /Users/cowens/perl5/lib/perl5/MooseX/Method/Signatures/Meta/Method.pm line 139
Foo::BUILD('Foo=HASH(0x804b20)', 'HASH(0x8049e0)') called at generated method (unknown origin) line 25
Foo::new('Foo') called at test.pl line 13
Mais si je dis:
#!/usr/bin/perl
use MooseX::Declare;
class Foo {
has foo => (is => "rw", isa => "Str", default => "foo");
sub BUILD {
my $self = shift;
print "I was called\n";
}
}
Foo->new;
tout fonctionne très bien (mais est laid et hors de lieu avec le reste du code).
Wow, ce qui est laid, 'self' de $ existe et contient l'objet béni, mais vous avez aussi ce hashref inutile plein des arguments passés dans 'new'. C'est une verrue majeure sur ce qui est autrement un beau système. –
Cette "verrue" peut-être quelque chose qui va être enlevé. Quand vous regardez vieux docs (http://search.cpan.org/~drolsky/Moose-0.65/lib/Moose/Cookbook/Basics/Recipe4.pod) vous verrez que l'argument supplémentaire de paramètre hashref est nécessaire. Cependant, dans les nouveaux documents (http://search.cpan.org/dist/Moose/lib/Moose/Cookbook/Basics/Recipe4.pod), vous pouvez maintenant utiliser $ self direct pour accéder aux "params". Alors peut-être partie d'un processus évolutif où ce paramètre supplémentaire sera déposé! Moose mailing list/IRC est le meilleur endroit pour savoir si "params" arg est encore nécessaire et quels sont les plans darwiniens ;-) – draegtun
Un argument à une méthode est une "verrue majeure"? Je n'aimerais pas entendre ce que vous pensez du système objet C++ ou Java ... – jrockway