Как передать опционально-позиционные аргументы в функцию в Matlab - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь понять использование позиционных аргументов в MATLAB, и я имел в виду эту страницу.

Допустим, у меня есть функция MATLAB, определенная следующим образом:

function printPhoto(filename,varargin)
    p = inputParser;
    defaultFinish = 'glossy';
    validFinishes = {'glossy','matte', 'colorful'};
    checkFinish = @(x) any(validatestring(x,validFinishes));

    defaultColor = 'RGB';
    validColors = {'RGB','CMYK','colorful'};
    checkColor = @(x) any(validatestring(x,validColors));

    defaultWidth = 6;
    defaultHeight = 4;

    addRequired(p,'filename',@ischar);
    addOptional(p,'finish',defaultFinish,checkFinish);
    addOptional(p,'color',defaultColor,checkColor);
    addParameter(p,'width',defaultWidth,@isnumeric);
    addParameter(p,'height',defaultHeight,@isnumeric);
    parse(p,filename,varargin{:});
end

Когда я вызываю вышеуказанную функцию следующим образом: printphoto('myFile.img', 'colorful'), возможно ли сделать этот второй аргумент соответствующим второму необязательному позиционному аргументу в определении функции, т.е. color='colorful', а не finish='colorful'?

1 Ответ

0 голосов
/ 08 января 2019

Это то, что вы получаете, когда смешиваете опционально-позиционные аргументы и параметры. ИМХО , вы должны использовать один или другой, но не оба .

Когда вы определяете аргумент как позиционный, вы говорите MATLAB, что этот ввод всегда появится в этом конкретном месте, , если он появится . Если вы хотите поиграть с порядком входных данных, это именно то, для чего предназначен аргумент типа параметра.

Подумайте об этом, следующие синтаксисы ничем не отличаются:

printphoto('myFile.img','color','colorful')
printphoto('myFile.img', color='colorful' )

Поэтому я бы предложил придерживаться аргументов типа параметра, но если вы настаиваете на том, чтобы они были позиционными, убедитесь, что вы присваиваете значение по умолчанию для ввода, если пользователь хочет «пропустить» его (предоставив некоторые согласованные «нулевое» значение, например "" или []).

...