Matlab Tips: 如何在函数内部得到被调用时的输入变量名?

目录

1. 背景

2. 解决方案


1. 背景

        这个问题的源头是在仿真中要做系统参数的logging,在仿真中参数按类别存储在若干个结构体(struct)或者字典(containers.Map),然后写一个函数将这些存储参数的字典或结构体以递归的方式打印到一个log文件中去。其中结构体递归式打印的函数发布在我另一篇博客中:Matlab Tips: 结构体递归式打印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 Tips: 如何在函数内部得到被调用时的输入变量名?

 

        注意,不能从matlab命令行提示符下直接调用inputname,或者从matlab命令行提示符下直接调用的脚本中调用inputname,只能从函数内部调用。

        

上一篇:前端小tips:定位(position)


下一篇:《100-gdb-tips》——查看调用堆栈