2013-10-09 4 views
4

Представьте себе функцию с переменным количеством входных аргументов, поочередно запрашивая строку и значение.Элементы ячейки как разделенные запятой входные аргументы для функции varargin

myfunction('string1',value1,'string2',value2,...) 

e.g.

myfunction('A',5,'B',10) 

Я хочу, чтобы сохранить возможность вызова функции, как, что и я не хочу, чтобы изменить оценку varargin внутри функции. (За исключением ('string1','string2',...,value1,value2,...), если это помогает)

Но у меня есть мои входные строки и значения хранятся в массиве ячеек inputvar <4x1 cell>:

inputvar = 

'A' [5] 'B' [10] 

Кроме того, этот массив ячеек имеет переменную длину.

Мое намерение состоит в том, чтобы назвать свою функцию как-то так:

myfunction(inputvar) 

, который, очевидно, не работает. Любые идеи о том, как я могу преобразовать свою ячейку в допустимый синтаксис ввода?


Я уже пытался создать строку, как

''string1',value1,'string2',value2' 

и использовать eval, чтобы использовать его в вызове функции. Но это не сработало. Таким образом, альтернативно есть способ трансформировать строку в код?

ответ

6

Вы должны быть в состоянии сделать это следующим образом:

myfunction(inputvar{:}) 

{:} создает comma separated list


EDIT: Например:

function val = myfunction(string1,value1,string2,value2) 
    if string1 == 'A' 
     val = value1; 
    else 
     val = value2; 
end 

myfunction('A',5,'B',10) 
myfunction('B',5,'B',10) 
A = {'A',5,'B',10}; 
myfunction(A{:}) 
A = {'B',5,'B',10}; 
myfunction(A{:}) 

возвращается:

ans = 5 
ans = 10 
ans = 5 
ans = 10 
+0

... который приводит меня к проблеме, когда я получаю символ 'A', а не строку' 'A''. Я уверен, что смогу найти решение для себя, но я буду благодарен за любые быстрые мысли;) – thewaywewalk

+0

@thewaywewalk Я не уверен, что вы имеете в виду, это работает на примере, который я только что добавил? – Dan

+0

Я потерял обзор, какова была моя фактическая ошибка, но она, наконец, работает. благодаря! – thewaywewalk

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