2015-03-06 1 views
2

У меня есть функция, которая принимает 3 обязательных входов и 1 дополнительный:Анонимные функции с varargin

f(A, B, C, X) 

Я хочу использовать анонимную функцию, таким образом

h = @(X)f(A,B,C,X) 

где A, B, C уже определены , так что я могу просто позвонить h(1) и код запускает f(A,B,C,1), а также h() для запуска f(A,B,C). Единственный способ, которым я могу это сделать (исправить меня, если я ошибаюсь) использует varargin. Я определяю

f(A,B,C,varargin) 

и использовать

h = @(varargin)f(A,B,C,varargin) 

Проблема заключается в том, что, когда я звоню непосредственно f(A,B,C,1), то внутри функции у меня есть varargin = {1}. Если я позвоню h(1), то у меня есть varargin = {{1}}. Как я могу избежать этого? Есть ли лучший способ реализовать то, что я хочу?

ответ

5

Вам нужно (или, скорее, это может быть лучше) расширить varargin в comma-separated list с текущей реализацией:

h = @(varargin)f(A,B,C,varargin{:}) 

Вопрос о том, есть ли лучший способ зависит от специфики проблема.

+0

Я не вижу никаких недостатков, используя 'varargin {:}', как это должно быть сделано. – Daniel

+0

@ Даниэль Я тоже, но мне не нравилась сила «необходимости» в то время. – TroyHaskin

+0

Это прекрасно работает, спасибо! – Simon