2013-05-03 2 views
0

Je dois répéter ce code plusieurs fois. Cela fait partie du système-testeur.Encapsuler du code avec des fonctions anonymes dans Matlab?

[email protected](fBE,fMCS,CI) 
{ 
    d='FV'; 
    dF=strcat('testing/systemTestFiles/D_', fBE, '_', fMCS, '_', d, '.txt'); 
    bepo(fBE,CI,fMCS,d,dF,oF); 

    d='B'; 
    oF=strcat('testing/systemTestFiles/O_', fBE, '_', fMCS, '_', d, '.txt'); 
    bepo(fBE,CI,fMCS,d,dF,oF); 
}; 

mais

Error: File: systemTester.m Line: 3 Column: 6 
The expression to the left of the equals sign is not a valid target for an 
assignment. 

Je ne sais pas, mais il semble que Matlab n'accepte pas les fonctions anonymes de cette grande taille. Alors, comment utiliser des fonctions anonymes pour encapsuler des codes plus grands, pas seulement des choses comme [email protected](x) x+1? Est-ce que le seul moyen pour l'encapsulation est de créer un nouveau fichier? [Mise à jour] ne fonctionne pas, il est possible d'en faire une exécution?

[email protected](fBE,fMCS)for d=1:2 
    for CI=0:0.25:1 
     if d==1 
      d='FV'; 
     else 
      d='B'; 
     end 
     oF=strcat('testing/systemTestFiles/O_', fBE, '_', fMCS, '_', d, '.txt'); 
     bepo(fBE,CI,fMCS,d,dF,oF); 
    end 
end; 

fBE='TestCase1 BE Evendist v2.txt'; 
fMCS='TestCase1 MCS.txt'; 
test(fBE,fMCS) 

Répondre

3

Les fonctions anonymes ne peuvent contenir qu'une seule instruction exécutable.

Dans votre cas, créez simplement une fonction M-file régulière.


Si vous êtes intéressé, il y a une série de articles sur le blog de Loren Shure présentant un style de programmation fonctionnelle, en utilisant des fonctions anonymes pour effectuer des tâches non-simples.

+0

Le code a un motif répété, mis à jour. Est-il possible d'en faire une exécution? – hhh

+0

n'a pas d'importance, vous ne pouvez pas mettre plusieurs instructions dans une fonction anonyme. D'ailleurs pourquoi ne pas simplement créer une fonction régulière? – Amro

Questions connexes