Page 1 sur 1

[R] Mettre en paramètre d'une fonction, une fonction

Posté : mer. 23 avr. 2008 13:38
par Nicolas
Bonjour,
ma question risque d'en laisser perplexe plus d'un mais je me lance quand meme.
Est ce que dans autoit on peut mettre en paramètre d'une fonction une fonction ?
Par exemple j'ai 3 fonctions : FN1(), FN2(),FN3().
je veux créer une fonction FN4() qui va prendre en paramètre FN1() ou FN2() ou FN3().
Par exemple comme ça : FN4(FN1()). Est ce que c'est possible ?

Cela me permettrait de vraiment simplifier le code d'un de mes script qui hélas dépasse les 3000 lignes car je repete souvent la meme chose (étant débutant), d'ou la création de fonction.

Merci d'avance pour vos réponses.

Nicolas

Re: [..] Mettre en paramètre d'une fonction, une fonction

Posté : mer. 23 avr. 2008 13:49
par tofu
Bonjour,

A priori, je ne vois aucune contre-indication à la réalisation de ceci.

J'ai fais un petit exemple pour tester

Code : Tout sélectionner

affChaine(a(),b(),c())


Func affChaine($a,$b,$c)
    $chaine = $a & " " & $b & " " & $c
    ConsoleWrite("Le résultat est: " & $chaine & @CRLF)
EndFunc

Func a()
    return "Bonjour," 
EndFunc

Func b()
    return "comment"
EndFunc

Func c()
    return "ca va?"
EndFunc
Cela a l'air de fonctionner correctement, évidemment là c'est un cas très basique, je suppose que si tu as plus de 3000 lignes de code c'est que le système doit être plus complexe mais dans l'idée ça devrait fonctionner.

Cordialement,

Re: [..] Mettre en paramètre d'une fonction, une fonction

Posté : mer. 23 avr. 2008 14:22
par Nicolas
merci pour ta réponse mais dans ton exemple tu récupérère dans la fonction affchaine() le résultat des fonctions a(), b(), et c() en utilisant le return dans tes fonctions. Mais le pb c'est que mes fonctions ne sont pas la pour retourner un résultat mais pour traiter des chaines de caractères et renvoyer des résultats dans un fichier HTML. Il faut donc que je puisse les exécuter.

est ce que si je fais ça cela foncionne.

Code : Tout sélectionner

$Func=a()
affChaine($Func)

Func affChaine($a)
  $a ; pour lancer la fonction rentrée en paramètre
 EndFunc

Func a()
    msgbox(1,"","Bonjour") 
EndFunc

Func b()
    return "comment"
EndFunc

Func c()
    return "ca va?"
EndFunc

Re: [..] Mettre en paramètre d'une fonction, une fonction

Posté : mer. 23 avr. 2008 14:37
par tofu
J'ai repris ton exemple pour le travailler un peu et arriver à ce résultat:

Code : Tout sélectionner

Func a()
    msgbox(1,"","Bonjour")
EndFunc

$Func = "a()"
affChaine($Func)

Func affChaine($a)
  Execute($a) ; pour lancer la fonction rentrée en paramètre
 EndFunc
En fait, je passe le nom de la fonction en tant que chaine de caractère, et je la fais s'exécuter grâce à la fonction Execute().

J'espère que je n'ai pas fais de contre-sens à ce que tu demandes.

Cordialement,

[R] Mettre en paramètre d'une fonction, une fonction

Posté : mer. 23 avr. 2008 15:03
par Nicolas
Tu n'as pas fait de contre-sens du tout !!! merci beaucoup c'est exactement ce que je voulais faire mais je ne connaissais pas execute.

Merci

Nicolas

Re: [R] Mettre en paramètre d'une fonction, une fonction

Posté : lun. 05 mai 2008 13:10
par tolf
La fonction Call est encore mieux que Execute car elle permet en plus de mettre des arguments dans la fonction appelée. Et donc pour reprendre l'exemple, ça donne :

Code : Tout sélectionner

$Func = "a"
Call($Func)

Func a()
    msgbox(1,"","Bonjour")
EndFunc

; inutile de passer par la fonction intermédiaire "affChaine"
;~ Func affChaine($a)
;~     Execute($a) ; pour lancer la fonction rentrée en paramètre
;~ EndFunc