目录
1. 背景
这个问题的源头是在仿真中要做系统参数的logging,在仿真中参数按类别存储在若干个结构体(struct)或者字典(containers.Map),然后写一个函数将这些存储参数的字典或结构体以递归的方式打印到一个log文件中去。其中结构体递归式打印的函数发布在我另一篇博客中:Matlab Tips: 结构体递归式打印https://blog.csdn.net/chenxy_bwave/article/details/118336038
但是当有多个结构体同时打印到同一个log文件中去的时候,分辨不出打印出来的参数原来是属于哪个结构体,查阅起来有点不便。如果能够知道这个传入printStruct()的结构体参数的变量名的话就可以把结构体参数的变量名也打印出来,这样就很方便了。
2. 解决方案
matlab内置函数inputname()可以用来实现这一目的。
语法:s = inputname(argNumber)
功能:函数输入的变量名称
其中,argNumber为参数出现函数接口的序号。
示例:
function foo(para1, para2, para3)
fprintf(1, 'Input parameter: \n');
for k = 1:1:nargin
fprintf(1, '\tThe %d-th calling variable is %s\n',k, inputname(k));
end
end
>> var1 = 1; var2 = 2; var3 = 3;
>> foo(var1, var2, var3)
输出如下:
注意,不能从matlab命令行提示符下直接调用inputname,或者从matlab命令行提示符下直接调用的脚本中调用inputname,只能从函数内部调用。