Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonctions avec parametres divers

4 réponses
Avatar
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 ?

4 réponses

Avatar
Paul Gaborit
À (at) 06 Sep 2011 12:24:12 GMT,
luc2 écrivait (wrote):

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 - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Stephane CHAZELAS
2011-09-06, 17:16(+02), Paul Gaborit:

À (at) 06 Sep 2011 12:24:12 GMT,
luc2 écrivait (wrote):

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
Avatar
Paul Gaborit
À (at) Tue, 6 Sep 2011 18:15:57 +0000 (UTC),
Stephane CHAZELAS écrivait (wrote):

2011-09-06, 17:16(+02), Paul Gaborit:

À (at) 06 Sep 2011 12:24:12 GMT,
luc2 écrivait (wrote):

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 - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
luc2
Le 06-09-2011, Paul Gaborit a écrit :

De quelles « libs » parlez-vous ?



chais plus... j'ai tout oublie on dirait...