Thread MooseX::Types - Problem mit Subtype und Where-Test
(8 answers)
Opened by roooot at 2010-09-22 22:18
Nächste Frage zum Thema Moose, Attributen usw.
Ich schreibe meine Klassen mithilfe von 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: 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(@_) }); 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 :)
|