Matlab - 如何在函数内部检索函数调用的确切参数列表?

时间:2012-03-22 05:42:05

标签: matlab parameters

假设我有这个功能:

function name_the_paramlist(varargin)
    % Print out varargin exactly how it is called as a string

基本上我想要它做的是,致电:

name_the_paramlist({'x', x}, y, 1, 'hello', [1, 2; 3, 4])

应该在屏幕上打印字符串:

'{''x'', x}, y, 1, ''hello'', [1, 2; 3, 4]}'

有什么建议吗?

ETA:我想要这样的事情的原因是希望解决这个问题: Matlab - how to create a subclass of dataset class keeping the dataset parameter constructor

1 个答案:

答案 0 :(得分:3)

好吧,如果您在命令行中键入此函数调用或使用F9运行(因此它保存在历史记录中),您可以读取history.m文件并将最后一个命令作为字符串。

fid = fopen(fullfile(prefdir,'history.m'),'rt');
while ~feof(fid)
    lastcmd = fgetl(fid);
end
fclose(fid);

然后得到论证部分:

arg_str = regexp(lastcmd, '\w+\((.+)\)','tokens','once');
arg_str = strrep(arg_str{:},'''','''''');

<强>更新

另一个想法。如果从另一个脚本或函数(m文件)调用此函数,则可以使用DBSTACK返回m文件名和当前行号:

SI = dbstack;
filename = SI(end).file;
lineNo = SI(end).line;

然后你可以按照第一个解决方案中的类似技术从m文件读取该行并获取参数部分。

与第一个解决方案相反,如果从命令行或编辑器单元模式运行,则无效。