Thread Klassen-Attribute nur für einen Methodenaufruf überschreiben (6 answers)
Opened by Kuerbis at 2016-01-11 09:44

Kuerbis
 2016-01-11 09:44
#183465 #183465
User since
2011-03-20
942 Artikel
BenutzerIn
[default_avatar]
Hallo!

Die Methode choose sollte die mit new gesetzten Attribute für ihren Aufruf überschreiben können, ohne diese global zu verändern.
Ist diese Art der Umsetzung OK?

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
39
#!/usr/bin/env perl6
use v6;

class Term::Choose {
    has Str $.prompt = 'Your Choice';
    has Int @.mark;
    has     %!backup_opt;
    # ...

    method choose ( Array $orig_list, %opt? ) {
        for %opt.keys -> $key {
            when $key eq 'prompt' {
                %!backup_opt{$key} = $!prompt;
                $!prompt = %opt{$key};
            }
            when $key eq 'mark' {
                %!backup_opt{$key} = [ @!mark ];
                @!mark = |%opt{$key};
            }

        }
        say "prompt: $!prompt";
        say "mark  : @!mark[]\n";
        self!rest_attributes();

    }

    method !rest_attributes {
        for %!backup_opt.keys -> $key {
            when $key eq 'prompt' { $!prompt = %!backup_opt{$key} }
            when $key eq 'mark'   { @!mark   = |%!backup_opt{$key} }
        }
    }
}

my $n = Term::Choose.new( prompt => 'AAAAA', mark => [ 5, 6 ] );
$n.choose( [ 1 .. 10 ] );
$n.choose( [ 1 .. 10 ], { prompt => 'BBBBB', mark => [ 1 .. 4 ] } );
$n.choose( [ 1 .. 10 ] );

View full thread Klassen-Attribute nur für einen Methodenaufruf überschreiben