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:
$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.
Ich könnte zwar folgendes Design wählen:
$ob->midi("")
Jedoch muss ich eine leeren aber definierte Wert vorhalten
so kommt das also nicht in Frage.
nun ist undef ja sowohl ein undefinierter Wert als auch ein Operator
undef $hash->{value} würde also den Wert auf undef setzen. Das iist mein Ziel.
Nun kann ich aber nicht schreiben:
undef $ob->midi();
Mir bleibt nur der Ausweg, eine Methode zu schreiben:
$ob->remove_midi
Wie kann ich das vermeiden?
Es handelt sich um einige Methoden die konsistent behandelt werden müssen.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische