|

riuscite a dirmi, guardando il seguente codice:
- cosa c'è di sbagliato
- qual'è il modo più elegante per correggerlo
- 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!
|