Как показать использование различных функций при использовании varargin (...)? - PullRequest
5 голосов
/ 23 февраля 2012

Когда вы вводите имя функции Matlab и открываете фигурную скобку (например, sum() в командном окне, открывается всплывающая подсказка, которая показывает все возможные варианты использования этой функции.

Когда я пишу свою собственную функциюкоторый принимает varargin, всплывающая подсказка отображает только одну опцию, которая вместо varargin ставит ... (например, myfunc(x,...)).

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

Ответы [ 2 ]

1 голос
/ 16 сентября 2016

Я могу получить вас там без редактирования «Синтаксиса», который работает в текущих выпусках, хотя и немного мутно.

Следующая функция принимает диапазон обязательных, необязательных и необязательных пар имя-значение для входных данных.Я хочу, чтобы подсказка давала пользователю информацию о необходимых и необязательных входах.varargin всегда существует, даже если в него не передаются переменные, и inputParser работает очень хорошо при передаче varargin.Я собираюсь воспользоваться этим, оставив свои необязательные входные данные для вызова функции, но затем сложу их в varagin, прежде чем я когда-либо с ними буду работать. * Подсказка инструмента

отобразит myFun (quency, gain_optional, phase_optional,...)

function myFun( frequency, gain_optional, phase_optional, varargin )

%% Get mandatory and optional Inputs using inputParser
p = inputParser;

% mandatory inputs
argName = 'frequency';
validation = @(x) validateattributes( x, {'numeric'}, {'2d','positive'} );
p.addRequired( argName, validation );


% optional inputs

% start by packaging all optional inputs into varargin.  The two optional
% inputs were kept out of varargin so they will display in the tooltip
if nargin > 2
    varargin = [{phase_optional} , varargin];
end
if nargin > 1
    varargin = [{gain_optional} , varargin];
end

% add optional inputs into inputParser
argName = 'gainLinear';
default = [];
validation = @(x) validateattributes( x, {'numeric'}, {'2d','positive'} );
p.addOptional( argName, default, validation );

argName = 'phaseDeg';
default = [];
validation = @(x) validateattributes( x, {'numeric'}, {'2d','positive'} );
p.addOptional( argName, default, validation );

% name-value pairs
argName = 'model';
default = [];
validation = @(x) validateattributes( x, {'numeric'}, {'vector','positive'} );
p.addParameter( argName, default, validation );

argName = 'order';
default = [];
validation = @(x) validateattributes( x, {'numeric'}, {'scalar','integer','>',0,'<',3} );
p.addParameter( argName, default, validation );

% pull out all passed data with the inputParser and stash into input struct
p.parse(frequency, varargin{:});
input = p.Results
0 голосов
/ 23 февраля 2012

Один из способов, если вам известно максимальное количество переменных входов и всех их имен, состоит в следующем:

function out = my_func(var1, var2, var3)

    if nargin < 1
        var1 = default_var1_value;
    end
    if nargin < 2
        var2 = default_var2_value;
    end
    if nargin < 3
        var3 = default_var3_value;
    end

end

Когда вы делаете это, Matlab позволяет вам вызывать my_func с 0,1,2 или 3 аргументами. Но во всплывающей подсказке будет только одна запись:

my_func(var1, var2, var3)

Мне это кажется, по крайней мере, лучше, чем .... Я понятия не имею, как / если можно сделать так, чтобы отображалось более одной подсказки.

Редактировать: Кажется, что встроенные функции где-то получают какую-то дополнительную привилегию. Например, функция rank поставляется с Matlab и отображает две подсказки. Если вы edit rank скопируете код в новый файл my_func.m и переименуете функцию my_func, он получит только одну подсказку. Так что это не просто специальное форматирование закомментированных строк вверху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...