2014-01-29 2 views
1
function myFunc = executeCmdByKind(var1,kind) 

switch kind 
case 'open' 
cmdToExecute = [''var1 '','' locationIs '',''clear'']; 

case 'close' 
cmdToExecute = [''var1 '','' locationIs '',''delete'']; 

case 'move' 
cmdToExecute = [''var1 '','' locationIs '',''move'']; 



    end 
a = system(cmdToExecute); 
end 

Мой вопрос: есть ли лучший способ «оптимальный», чтобы написать этот код, как я называю то же cmdToExecute только последний аргумент изменяетпереключатель/случая операторов код MATLAB

Спасибо,

+1

Что вы имеете в виду 'последного агда changes'? – herohuyongtao

+2

Почему все эти '' ''? – Daniel

+0

Что такое двойной '' ''? Предполагается, что это массив ячеек строк? Это очень странный синтаксис Matlab для меня. Также вы никогда не назначаете 'myFunc', поэтому ваша функция не будет выводить ... – Dan

ответ

2

Ваших синтаксис не имеет для меня никакого смысла, но я буду придерживаться его. Вы можете упорядочить свой код следующим образом:

function myFunc = executeCmdByKind(var1,kind) 

switch kind 
case 'open' 
    last = ''clear''; 

case 'close' 
    last = ''delete''; 

case 'move' 
    last = ''move''; 

end 

cmdToExecute = [''var1 '','' locationIs '', last]; 
1

Есть, как всегда, несколько способов сделать это. Я хотел бы сделать это так:

function myFunc = executeCmdByKind(var1,kind) 
    a = {'open', 'close', 'move'}; 
    b = {'clear', 'delete', 'move'}; 
    logi = ismember(a, kind); 
    cmdToExecute = [var1, locationIs, b{logi}]; 

Это не самый хороший код, но это коротко, если вы хотите, чтобы ;-) Сначала я смотрю через kind какой индекс у него есть в векторе a и после retreiving индекс, можно затем выбрать соответствующий элемент из b :-)

Edit: Короткий и это легко расширяемые в будущем с большим количеством элементов :-)

+2

+1 Я собирался добавить это в свой ответ в качестве альтернативы. – Dan

+3

'find' должен быть устаревшим. –

+2

О, да, конечно :-) Логическое индексирование также будет делать :-) – tim

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