2013-05-03 6 views
0

Мне нужно повторить этот код много раз. Это часть системного тестера.Инкапсулирующий код с анонимными функциями в 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); 
}; 

но

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. 

я не знаю, но это выглядит как Matlab не принимает анонимные функции этого большого размера. Итак, как использовать анонимные функции для инкапсуляции больших кодов не только таких вещей, как [email protected](x) x+1? Единственный способ для инкапсуляции здесь создать новый файл?

[Обновить] не работает, можно сделать это в исполнение?

[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) 

ответ

3

Анонимные функции могут содержать только один исполняемый оператор.

Так что в вашем случае просто создайте обычную функцию M-файла.


Если вас интересует, есть ряд articles на блоге Лорена Shure в представляя функциональный стиль программирования, используя анонимные функции, чтобы сделать непростые задачи.

+0

Код имеет повторяющийся шаблон, обновленный. Можно ли превратить его в казнь? – hhh

+0

не имеет значения, вы не можете добавить несколько выражений в анонимную функцию. Кроме того, почему бы не просто создать регулярную функцию? – Amro

Смежные вопросы