Schrift
[thread]6102[/thread]

Methode überladen?

Leser: 3


<< >> 6 Einträge, 1 Seite
[HR]Doomrunner
 2004-02-28 13:25
#80375 #80375
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi,

an der Uni habe ich im ersten Semester ein wenig in Java hineinschnuppern müssen. Da kann man bei der Objektorientierung ja Methoden mit gleichen Namen überladen. Unterschieden werden die dann durch die Parameterliste.

Geht sowas auch in Perl? Wenn ja, wie? Habe übrigens schon gegoogled und bin leider nicht fündig geworden ???
Ronnie
 2004-02-28 13:39
#80376 #80376
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Da Perl nicht typensicher ist, besteht nicht die Notwendigkeit Methoden oder Funktionen zu überladen. Durch Prototypen kannst du aber einschränken was die Methode/Funktion als Übergabewert akzeptiert. Dies kann aber umgangen werden wenn die Methode/Funktionen via &methode() aufgerufen wird.
[HR]Doomrunner
 2004-02-28 13:42
#80377 #80377
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Ich würde eine Methode aber gerne überladen...

Also geht das nicht, oder vielleicht doch?
Strat
 2004-02-28 14:26
#80378 #80378
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
In Perl ist mir dafuer kein gut gangbarer Weg bekannt (es sei denn ueber Sourcefilter, was aber nicht wirklich praktikabel ist).
Da wuerde ich eher in der Methode abfragen, was uebergeben wurde, und darauf reagieren. Dies ist in der Regel vom Design her besser, und von der Sicherheit sowieso, wenn es sich um eine Klasse handelt, die andere Leute benuetzen (da sollte man immer die uebergebenen Parameter ueberpruefen, damit da nicht an den falschen Stellen Fehlermeldungen oder Warnungen auftauchen, die den Benutzer in die Irre fuehren).

Wenn du einen sehr flexiblen Weg der Parameteruebergabe willst, dann ist die per Hash sehr schoen:
Code: (dl )
1
2
3
4
5
6
7
8
$object->method(param1 => $value1, param2 => $value2, ...);
sub method {
my $self = shift;
my %params = (
param1 => 'standardwert1',
param2 => 'standardwert2',
@_);
...
\n\n

<!--EDIT|Strat|1077971365-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2004-02-28 15:42
#80379 #80379
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Ronnie,28.02.2004, 12:39]Durch Prototypen kannst du aber einschränken was die Methode/Funktion als Übergabewert akzeptiert.[/quote]
bei methoden (also bei aurufen wie $object->method()) werden
prototypen ignoriert.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
sri
 2004-02-28 20:39
#80380 #80380
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[HR
Doomrunner,28.02.2004, 12:42]Ich würde eine Methode aber gerne überladen...

Also geht das nicht, oder vielleicht doch?

Schau dir doch mal Class::Multimethods an.
<< >> 6 Einträge, 1 Seite



View all threads created 2004-02-28 13:25.