fonctions avec parametres divers

Le
luc2
salut,

en utilisant des libs, j'ai remarque que certaines de leurs fonctions
acceptaient des parametres a la suite :

fonction( 'hote.com', 80, 'tcp' );

et que la meme fonction acceptait des parametres sous forme de hash :

fonction( host => 'hote.com', port => 80, protocol => 'tcp' );

comment ils font ca ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #23733621
À (at) 06 Sep 2011 12:24:12 GMT,
luc2
en utilisant des libs, j'ai remarque que certaines de leurs fonctions
acceptaient des parametres a la suite :

fonction( 'hote.com', 80, 'tcp' );

...et que la meme fonction acceptait des parametres sous forme de hash :

fonction( host => 'hote.com', port => 80, protocol => 'tcp' );

comment ils font ca ?



En général, c'est plutôt un truc du genre :

fonction( 'hote.com', 80, 'tcp' );
ou
fonction({host => 'hote.com', port => 80, protocol => 'tcp'});

Les accolades supplémentaires permettent alors à la fonction appelée de
détecter que son seul paramètre est de type « référence à une table de
hachage » et donc d'identifier sans aucun risque un appel sous la
deuxième forme.

Pour faire comme vous le suggérez, cela me semble plus difficile et
lourd. Il faut d'abord vérifier qu'on a un nombre paire d'arguments
(sinon on est dans la première forme) puis ensuite vérifier que chaque
argument impaire correspond à une clé acceptable (sinon on est dans la
première forme) et alors on peut sans doute conclure qu'on est dans la
deuxième forme d'appel. Mais, je le répète, cela me semble très lourd et
risqué... De plus, je n'ai pas souvenir d'avoir déjà vu cela dans un
module Perl.

De quelles « libs » parlez-vous ?

--
Paul Gaborit - Perl en français -
Stephane CHAZELAS
Le #23734231
2011-09-06, 17:16(+02), Paul Gaborit:

À (at) 06 Sep 2011 12:24:12 GMT,
luc2
en utilisant des libs, j'ai remarque que certaines de leurs fonctions
acceptaient des parametres a la suite :

fonction( 'hote.com', 80, 'tcp' );

...et que la meme fonction acceptait des parametres sous forme de hash :

fonction( host => 'hote.com', port => 80, protocol => 'tcp' );

comment ils font ca ?




[...]
De plus, je n'ai pas souvenir d'avoir déjà vu cela dans un
module Perl.

De quelles « libs » parlez-vous ?



CGI.pm? Voir le rearrange() de CGI::Util

(c'est plutot fonction(-host=>'host.com'...) et je suis d'accord
que c'est plutot dangereux et j'eviterais).

--
Stephane
Paul Gaborit
Le #23734921
À (at) Tue, 6 Sep 2011 18:15:57 +0000 (UTC),
Stephane CHAZELAS
2011-09-06, 17:16(+02), Paul Gaborit:

À (at) 06 Sep 2011 12:24:12 GMT,
luc2
en utilisant des libs, j'ai remarque que certaines de leurs fonctions
acceptaient des parametres a la suite :

fonction( 'hote.com', 80, 'tcp' );

...et que la meme fonction acceptait des parametres sous forme de hash :

fonction( host => 'hote.com', port => 80, protocol => 'tcp' );

comment ils font ca ?




[...]
De plus, je n'ai pas souvenir d'avoir déjà vu cela dans un
module Perl.

De quelles « libs » parlez-vous ?



CGI.pm? Voir le rearrange() de CGI::Util

(c'est plutot fonction(-host=>'host.com'...) et je suis d'accord
que c'est plutot dangereux et j'eviterais).



C'est vrai. Je l'avais oublié celui-là... ;-)

Le module CGI est très ancien et utilise effectivement une version très
limitée de cette méthode (« limitée » dans le sens où la seconde forme
syntaxique ne s'applique que lorsque le premier argument commence par
"-" et, de plus, toutes les clés commencent par un "-").

En fait, je ne suis pas sûr que ce soit véritablement « dangeureux »
mais, en revanche, je trouve cela lourdingue (en tous cas, ça bouffe de
la CPU pour pas grand chose).

L'autre cas, qui me semble beaucoup plus courant, ce sont les modules
qui n'acceptent que la seconde forme (des paramètres nommés et donc non
positionnels).

--
Paul Gaborit - Perl en français -
luc2
Le #23735271
Le 06-09-2011, Paul Gaborit
De quelles « libs » parlez-vous ?



chais plus... j'ai tout oublie on dirait...
Publicité
Poster une réponse
Anonyme