Schrift
[thread]12555[/thread]

default-Werte bei Parameterübergabe: 0 als Wert zulassen (Seite 2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
renee
 2008-10-02 12:51
#115099 #115099
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei

Code (perl): (dl )
1
2
3
sub test {
    croak "mandatory parameters are missing" unless @_ == 23;
}


ist es nur 1 croak...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Struppi
 2008-10-02 14:06
#115100 #115100
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Schon klar, aber er macht ja zwei Tests, der erste darf kein undef, 0 oder Leerstring sein, der zweite darf nur kein undef sein.
pktm
 2008-10-02 14:21
#115102 #115102
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ich wusste auch garnicht, dass man maximal eine Fehlermeldung erzeugen darf, wenn der Benutzer mehr als eine Möglichkeit hat, was falsch zu machen :)

Ich mag das, wenn ganz genau gesagt wird, wo der Fehler liegt. Dann muss man nicht so viel Manpage-Abgleich machen.
http://www.intergastro-service.de (mein erstes CMS :) )
nepos
 2008-10-02 15:32
#115105 #115105
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Finde ich persönlich auch besser, wenn die Fehlermeldung genau sagt, was denn fehlt und man nicht erst in der Doku die Parameter abgleichen muss.
murphy
 2008-10-02 16:11
#115107 #115107
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich persönlich finde es besser, wenn Fehler, die die Anzahl der Parameter eines Funktionsaufrufes betreffen, nicht erst zur Laufzeit, sondern schon beim Kompilieren des Programmes erkannt und automatisch gemeldet werden, ohne dass ich dafür irgendetwas manuell überprüfen und ein die ausführen muss und vor allem ohne dass man so einen Fehler, weil er erst zur Laufzeit auftritt, leicht übersehen kann, wenn man nicht sehr gründlich testet.

Und, oh Wunder, obwohl Perl eine klassische Skriptsprache ist, gibt's auch hier Prototypen, die (unter anderem) genau zu diesem Zweck gedacht sind – also warum sollte man sie nicht verwenden?

Schade eigentlich, dass es nicht auch Prototypen für optionale Parameter und Schlüsselwortparameter gibt...
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-10-02 16:14
#115108 #115108
Und die funktionieren auch bei Klassen/Objekten?
nepos
 2008-10-02 16:59
#115109 #115109
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nein. Bei OO in Perl werden die Prototypen ignoriert.
renee
 2008-10-02 18:05
#115113 #115113
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
murphy+2008-10-02 14:11:25--
Schade eigentlich, dass es nicht auch Prototypen für optionale Parameter und Schlüsselwortparameter gibt...


Code (perl): (dl )
sub test ($;$);


Hier ist das zweite $ optional.... Pflicht- und Optionalparameter werden durch ; getrennt.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
murphy
 2008-10-02 21:18
#115115 #115115
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@renee: Cool, das wusste ich noch gar nicht – mag daran liegen, dass dieses Feature bei Perl 5.8 noch undokumentiert ist, obschon es auch da funktioniert. Bei Perl 5.10 wird es aber in perlsub erwähnt.
When C++ is your hammer, every problem looks like your thumb.
MatthiasW
 2008-10-02 23:15
#115117 #115117
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Nein, auch bei Perl 5.8.8 ist es in perlsub dokumentiert:
Quote
A semicolon (;) separates mandatory arguments from optional arguments. It is redundant before @ or %, which gobble up everything else.

Genau wie dieses coole Feature mit Prototypen:
Quote
As the last character of a prototype, or just before a semicolon, you can use _ in place of $: if this argument is not provided, $_ will be used instead.

Schade nur, dass es bei OO nicht mehr funktioniert..

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2008-09-28 22:34.