在MATLAB中记录功能参数

Chi*_*chi 5 matlab logging

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

gno*_*ice 8

听起来你有一个main函数,从那个函数你想调用一个函数LogParams来获取传递给main函数的变量名称列表.以下是实现功能的一种方法LogParams:

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

返回的输出LogParams将是一个单元数组,其中包含传递给调用函数的变量的名称LogParams.以上解决方案使用以下功能:

  • EVALIN:计算调用函数工作空间中的表达式.
  • ARRAYFUN:作为for循环的替代方案.
  • NARGIN:获取传递给函数的参数数量.
  • INPUTNAME:获取输入变量的名称.

作为LogParams工作原理的说明,创建以下调用它的函数:

function main_function(a,b,varargin)
  disp(LogParams);
end
Run Code Online (Sandbox Code Playgroud)

现在用多个输入调用它(假设变量x,yz在工作空间中定义):

>> 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'
Run Code Online (Sandbox Code Playgroud)