2010-01-11 83 views
5

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

回答

8

这听起来像你有一个主要功能,并从该功能,你想调用函数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 

和现在与多个输入端(假定变量xy调用它,并且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' 
+0

非常整齐! ..........(点到垫15个字符) – 2010-01-12 06:44:38

+0

谢谢。这有帮助。 – 2010-01-12 14:58:54

+0

+1对呼叫功能的影响最小。 – Marc 2010-01-13 15:19:06