Voici une méthode qui garantit l'ordre d'exécution et qui, (avec les modifications mentionnées à la fin) permet de passer des arguments différents à des fonctions différentes.
call1 = @(a,b) a();
call12 = @(a,b) call1(b,call1(a,b));
La clé est call1
qui appelle son premier argument et ignore son second. call12
appelle son premier argument, puis son second, et renvoie la valeur du second. Cela fonctionne car une fonction ne peut pas être évaluée avant ses arguments. Pour créer votre exemple, vous devez écrire :
foo = @() call12(functionCall1, functionCall2);
Code d'essai
Voici le code de test que j'ai utilisé :
>> print1=@()fprintf('1\n');
>> print2=@()fprintf('2\n');
>> call12(print1,print2)
1
2
Appeler d'autres fonctions
Pour appeler 3 fonctions, vous pourriez écrire
call1(print3, call1(print2, call1(print1,print2)));
4 fonctions :
call1(print4, call1(print3, call1(print2, call1(print1,print2))));
Pour plus de fonctions, continuez le schéma d'imbrication.
Passage d'arguments
Si vous avez besoin de passer des arguments, vous pouvez écrire une version de call1
qui prend des arguments et ensuite faire la modification évidente à call12
.
call1arg1 = @(a,arg_a,b) a(arg_a);
call12arg1 = @(a, arg_a, b, arg_b) call1arg1(b, arg_b, call1arg1(a, arg_a, b))
Vous pouvez également créer des versions de call1 qui prennent plusieurs arguments et les mélanger comme il convient.