Thread MooseX::Types - Problem mit Subtype und Where-Test (8 answers)
Opened by roooot at 2010-09-22 22:18

roooot
 2010-09-23 13:50
#141502 #141502
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Nächste Frage zum Thema Moose, Attributen usw.


Ich schreibe meine Klassen mithilfe von CPAN:MooseX::Declare, weil ich den Syntax einfach mag.
Allerdings habe ich jetzt das Problem, dass wenn ich ein Attribut mit undef initialisiere er denkt, dieses undef müsste nun die isa Anforderungen erfüllen. Das klappt natürlich nicht.
Das Problem ist bekannt und es gibt auch ein Modul, dass diese "Schwierigkeit" beseitigt: CPAN:MooseX::UndefTolerant.
In Verbindung mit MooseX::Declare klappt das allerdings nicht, ich denke es liegt einfach daran, dass der BUILD Ablauf bei MooseX::Declare einfach komplett anders funktioniert.

MooseX::UndefTolerant schaltet sich um die initialize_instance_slot Funktion wie folgt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
around('initialize_instance_slot', sub {
    my $orig = shift;
    my $self = shift;

    my $ia = $self->init_arg;

    # $_[2] is the hashref of options passed to the constructor. If our
    # parameter passed in was undef, pop it off the args...
    pop unless (exists($_[2]->{$ia}) && defined($_[2]->{$ia}));

    # Invoke the real init, as the above line cleared the unef
    $self->$orig(@_)
});
Er schaut einfach welche Attribute als undef initialisiert werden und löscht diese aus den Initialisierungsargumente.

Bei MooseX::Declare finde ich allerdings weder die initialize_instance_slot Funktion noch weiß ich, wo die Argumente geparsed werden.
Bin für irgendwelche Tipps dankbar.
Last edited: 2010-09-23 13:51:41 +0200 (CEST)
Viele Grüße :)

View full thread MooseX::Types - Problem mit Subtype und Where-Test