在MATLAB中记录功能参数

时间:2010-01-11 20:33:29

标签: logging matlab

我正在尝试为传递给MATLAB中的函数的所有输入参数编写通用日志记录函数。是否可以轻松地将所有输入参数传递给另一个函数而无需单独命名参数?在日志记录功能中,我当然可以在for循环中使用inputname(i)来获取参数名称。我宁愿不必在main函数中执行此逻辑。那么,有没有办法做LogParams(allInputParams)

之类的事情

1 个答案:

答案 0 :(得分:8)

听起来你有一个main函数,从那个函数中你想调用一个函数LogParams来获取传递给main函数的变量名称列表。以下是实现函数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

现在使用多个输入调用它(假设工作空间中定义了变量xyz):

>> 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'