Регистрация параметров функции в MATLAB - PullRequest
5 голосов
/ 11 января 2010

Я пытаюсь написать обобщенную функцию ведения журнала для всех входных параметров, передаваемых функции в MATLAB. Можно ли легко передать все входные параметры другой функции без индивидуального именования параметров? В функции ведения журнала я, конечно, могу использовать inputname(i) в цикле for для получения имен параметров. Я бы предпочел не выполнять эту логику в основной функции. Итак, есть ли способ сделать что-то вроде LogParams(allInputParams)?

1 Ответ

8 голосов
/ 11 января 2010

Звучит так, будто у вас есть основная функция, и из этой функции вы хотите вызвать функцию LogParams, чтобы получить список имен переменных, переданных в основную функцию. Вот один из способов реализации вашей функции LogParams:

function names = LogParams
  names = evalin('caller','arrayfun(@inputname,1:nargin,''UniformOutput'',0)');
end

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

  • EVALIN : для вычисления выражения в рабочей области вызывающей функции.
  • ARRAYFUN : как альтернатива циклу for.
  • NARGIN : чтобы получить количество аргументов, переданных функции.
  • INPUTNAME : получить имя входной переменной.

В качестве иллюстрации работы LogParams создайте следующую функцию, которая ее вызывает:

function main_function(a,b,varargin)
  disp(LogParams);
end

и теперь вызывайте его с несколькими входами (при условии, что переменные x, y и z определены в рабочей области):

>> main_function(x,y)
    'x'    'y'

>> main_function(x,y,z)
    'x'    'y'    'z'

>> main_function(x,y,z,z,z,z)
    'x'    'y'    'z'    'z'    'z'    'z'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...