-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    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    

Cerca






 

« Settima Esegesi | Home | Daily Perl FAQ »

l'ereditarietà diseredata
01.03.04


riuscite a dirmi, guardando il seguente codice:

  1. cosa c'è di sbagliato
  2. qual'è il modo più elegante per correggerlo
  3. cosa si può fare per evitare simili errori
package SomeData;

sub new { bless \pop, shift }
sub value { ${shift;} }

sub add {
    my($self, $type, $value) = @_;
    if($type eq 'number') { return $$self += $value; }
    if($type eq 'string') { return $$self .= $value; }
    die "only string or number allowed";
}

sub increment {
    my $self = shift;
    $self->add(number => 1);
}

package MyNumber;

use base qw( SomeData );

sub add {
    my($self, $value) = @_;
    die "not a number" unless $value =~ /^\d+$/;
    $$self += $value;
}

sub subtract {
    my($self, $value) = @_;
    die "not a number" unless $value =~ /^\d+$/;
    $$self -= $value;
}

package main;

my $answer = MyNumber->new(42);
print $answer->value(), "\n";

$answer->subtract(1);
print $answer->value(), "\n";

$answer->increment();
print $answer->value(), "\n";

cheers,
Aldo

Inviato da dada il 01.03.04 15:14
Ti è piaciuto questo articolo? Iscriviti al feed!










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google