[R] Appel fonction avec param optionnels

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

[R] Appel fonction avec param optionnels

#1

Message par sksbir »

Bonjour
Je sèche sur une question toute bête, mais difficile à formuler ( et donc à retrouver si quelqu'un en a déjà parlé) :
Soit la fonction suivante:

Code : Tout sélectionner

func test($PARM1,$PARM2=2,$PARM3=3)
msgbox(0,"test","Parm1=" & $PARM1 & ",Parm2=" & $PARM2 & ",Parm3=" & $PARM3)
endfunc
 
Comment appeler cette fonction avec le paramètre 2 par défaut, mais le paramètre 3 renseigné ?
Exemple 10,.. 30 : la fonction est supposée rendre : 10,2,30
parce que
- avec : test(10,"",30) on a "" dans PARM2 au lieu de 2.
- avec : test(10,,30) on a une erreur de syntaxe ( pourtant, ça parait cohérent comme syntaxe non ? )

Alors, j'ai trouvé une méthode bourrin, mais c'est vraiment bourrin:

Code : Tout sélectionner

func test($PARM1,$PARM2="",$PARM3="")
if $PARM2="" then $PARM2=2
if $PARM3="" then $PARM2=3
msgbox(0,"test","Parm1=" & $PARM1 & ",Parm2=" & $PARM2 & ",Parm3=" & $PARM3)
endfunc
 
et là, on appelle test ainsi : test(10,"",30) pour obtenir le résultat attendu.

Quelqu'un a une meilleure idée ?
Merci d'avance. :)
Modifié en dernier par sksbir le mar. 22 févr. 2011 15:40, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Appel fonction avec param optionnels

#2

Message par zeshrek »

En fait, les parametres par defaut ne sont pris en compte que si il n'y a pas d'autre parametre passé apres.
Par exemple dans ton cas si tu fais
test(10) ou test(10,5)
ca marchera
Par contre impossible d'oublier un parametre au milieu de la liste
L'habitude est de mettre -1 plutot que "" pour que ce soit la valeur par défaut
Sinon, il y a aussi le keyword Default

Mais dans tous les cas il faut alors en passer par ta méthode 'bourrin' mais avec un petit aménagement :

Code : Tout sélectionner

func test($PARM1,$PARM2=2,$PARM3=3)
if $PARM2=-1 or $PARM2=Default then $PARM2=2
if $PARM3=-1 or $PARM3=Default then $PARM2=3
msgbox(0,"test","Parm1=" & $PARM1 & ",Parm2=" & $PARM2 & ",Parm3=" & $PARM3)
endfunc
 
Comme ca si les parametres sont omis (cf début de mon msg), ca marche, et si ils sont mis à -1 ou a Default, ca marche aussi
Si vis pacem para bellum
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Appel fonction avec param optionnels

#3

Message par sksbir »

merci à toi pour cette réponse rapide.

C'est un peu ce que je craignais.
Par ailleurs, quand on gratte un peu, on trouve des trucs bizarres autour de "default".

number(default) ça fait -1, string(default), ça fait "default"
mais le test default=-1 retourne False, ainsi que default="default"

Conclusion: Default, c'est ni -1, ni "default"... c'est juste Default, donc il faut bien garder les 2 tests comme tu l'écris , par rapport à l'usage courant des fonctions
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Appel fonction avec param optionnels

#4

Message par Tlem »

Je conseil vivement la lecture de quelques fichiers du dossier Include.
Vous en apprendrez beaucoup de choses. :wink:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre