Thread Moose-Attribut weiterleiten (7 answers)
Opened by Martin at 2014-04-28 00:04

Gast Martin
 2014-04-30 17:36
#175139 #175139
Ich denke, Definition vor Implementierung ist Best-Practice, aber nicht zwingend erforderlich (auch wenn es Sinn macht).

Ich habe es vorerst folgendermaßen gelöst bekommen, zwar umständlich, aber es scheint auf den ersten Blick zu funktionieren (ich schreibe die Builder aus Übersichtsgründen hier direkt nach der Definition)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
has 'container' => (
    traits     => ['Array'],
    is         => 'rw',
    isa        => 'ArrayRef',
    lazy_build => 1,
    handles    => {
        get_by_id => 'get',
    },
);
sub _build_container {
    return [ 'w', 1 .. 145 ];
}

has 'color' => (
    is         => 'rw',
    isa        => 'Str',
    lazy_build => 1,
    trigger    => sub { $_[0]->container->[0] = $_[1] },
);
sub _build_color {
    return shift->get_by_id(0) || 'w';
}

has 'counter' => (
    traits     => ['Counter'],
    is         => 'rw',
    isa        => 'Num',
    lazy_build => 1,
    handles    => {
        inc_counter   => 'inc',
        dec_counter   => 'dec',
        reset_counter => 'reset',
    },
    trigger    => sub { $_[0]->container->[145] = $_[1] },
);
sub _build_counter {
    return shift->get_by_id( 145 ) || 1;
}


Aber vermutlich ist die Erstellung eines Traits der bessere Weg.
Last edited: 2014-04-30 17:50:58 +0200 (CEST)

View full thread Moose-Attribut weiterleiten