Документирование перегрузки функции MATLAB (переменные аргументы), поэтому использование всплывающего окна полезно - PullRequest
2 голосов
/ 06 марта 2020

Я пишу функции MATLAB для использования другими. Я знаю, как использовать nargin, varargin, et c. создать функцию с переменным числом входов.

Функция, которую я сейчас пишу, является рекурсивной, и мне нужно передать аргумент для обработки рекурсии, но пользователь никогда не должен передавать ничего для этого аргумента (или они должны передать неинтуитивное начальное значение, но это не должно отвлекать). Я хочу «спрятать» этот аргумент от пользователя, чтобы, когда они пишут код для использования этой функции, а MATLAB выскакивает в это маленькое желтое окно, в котором сообщается, какие аргументы принимает функция, он просто запрашивает аргументы, которые их интересуют. о.

Чтобы быть более точным, когда вы набираете rand(, MATLAB открывает небольшое окно справки с

rand ()
rand (n)
rand (sz1, ..., szN)
...

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

function ret = M(arg1, arg2, HideThisRecursiveArgument)
  % code that sets the starting value for HideThisRecursiveArgument when it's not passed
  % code that calls M(...) again with a different recursion value
end

Когда пользователь вводит M(, я хочу, чтобы всплывающее окно справки MATLAB отображало:

M (arg1, arg2)

(arg1 и arg2 названы в информативной форме, так что это будет достаточной «страницей справки» для моей функции.)

Как я могу задокументировать это использование, чтобы всплывающее окно справки по использованию функции MATLAB отображало это пользователь?

Если я использую varargin, пользователь может быть отвлечен / сбит с толку tryin g, чтобы выяснить, что еще может быть передано, так что это неудовлетворительно. Я пытался определить мою функцию с двумя аргументами, а затем искал третий, когда она вызывается, но MATLAB это не нравится.

Edit Я нашел Add Справка для вашей программы , и если пользователь использует команду help или щелкает ссылку Дополнительная справка ... в этом желтом всплывающем окне использования, я могу контролировать то, что они там видят, но это не говорит мне, как контролировать то, что появляется во всплывающем окне использования.

1 Ответ

2 голосов
/ 06 марта 2020

Я бы выбрал два отдельных интерфейса: функцию, которая вызывается извне, и вашу внутреннюю рекурсивную функцию со скрытым аргументом:

function z=foo(x,y)
    z=internalfoo(x,y,pi);   
end
function z=internalfoo(x,y,secret)
    if x>y
        z=internalfoo(y,x,secret);
    else
        z=secret*x;
    end
end

Вы можете поместить оба файла в один и тот же файл foo.m, только foo () может вызываться извне (если вы не делаете неприятных вещей). Приведенный выше пример содержит локальную функцию . В зависимости от вашей задачи для рекурсии иногда целесообразно использовать вложенную функцию с общими переменными.

...