Alexander (HH): Object Getter/Setter und undef

Beitrag lesen

Moin Moin!

Hi
Ich sitze gerade for einem Designproblem.

Ein Object Getter/Setter der einfachsten Art ist

sub midi {
  my $score = shift;
  if( $[0] ){ $score->{midi} = $[0] }
  return $score->{midi};
}


>   
> nun sollte mein Getter/Setter aber folgendes erfüllen:  
> ~~~perl
  

> $ob->midi  
> $ob->midi()  
> # gibt den Inhalt aus $score->{midi} zurück  
>   
> $ob->midi("val")  
> # setzt den Inhalt von $score->{midi}  
> # und gibt den neuen Inhalt zurück  
>   
> $ob->midi(undef)  
> # entfernt die Eigenschaft $score->{midi}  
> 

obiges ist aber identisch mit
$ob->midi()
und ist deshalb ein einfacher Getter.

Falsch. $_[1] ist zwar bei $ob->midi() und $ob->midi(undef) undefiniert, aber @_ enthält im ersten Fall nur ein Element, im zweiten Fall zwei.

  
sub midi  
{  
    my $self=shift;  
    if (@_) {  
        my $value=shift;  
        if (defined $value) {  
            $self->{'midi'}=$value;  
            return $value; # oder $self, oder den alten Wert, oder gar nichts  
        } else {  
            delete $self->{'midi'};  
            return; # oder $self, oder den alten Wert (return value von delete)  
        }  
    } else {  
        return $self->{'midi'};  
    }  
}  

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".