Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Matlab捕获包含参数的变量的输入名称?_Matlab - Fatal编程技术网

如何让Matlab捕获包含参数的变量的输入名称?

如何让Matlab捕获包含参数的变量的输入名称?,matlab,Matlab,执行以下函数调用: Corr1DTimeSeriesMap(NetClimatologySubtracted(:,:,WinterIndices), NAO(WinterIndices)); 如果是Corr1dTimesPeriesmap(减去NetClimatology,NAO)然后 inputname(1) = 'NetClimatologySubtracted' 及 但是当我只为索引选择时,inputname将消失。inputnames对我来说很重要,因为我将它们用于绘图和文件名,并将

执行以下函数调用:

Corr1DTimeSeriesMap(NetClimatologySubtracted(:,:,WinterIndices), NAO(WinterIndices));
如果是
Corr1dTimesPeriesmap(减去NetClimatology,NAO)然后

inputname(1) = 'NetClimatologySubtracted'


但是当我只为
索引
选择时,
inputname
将消失。
inputname
s对我来说很重要,因为我将它们用于绘图和文件名,并将文件保存为。

简短回答;你不能。INPUTNAME函数的作用与此相同,许多类型的索引表达式“打断”了它(即,使其返回空字符串“”

更长的回答;虽然使用INPUTNAME使您的生活更加方便,但依赖变量名和索引表达式来标记图形是一个糟糕的想法。因为,坦率地说,在代码中如何命名某个人的变量不关任何人的事,除非他选择通过将变量嵌入字符串来公开它们。我见过很多诅咒词等用作变量名,尤其是在MATLAB代码中;-)

想象一下,如果有人选择使用您的代码,并最终绘制了一个OMG_我恨我的老板这么多变量。不酷


这很糟糕,需要更多的工作,但是请,请,请,请,让标签成为非可选的输入参数。

您看到的完全是预期的行为。如果你通过

NetClimatologySubtracted
然后按原样传递变量。但是,如果你路过

NetClimatologySubtracted(:,:,WinterIndices)
您正在传递一个未命名变量,该变量等于
NetClimatologySubtracted
的特定片段。没有未命名变量的名称是完全合乎逻辑的

您可以重新定义函数,使其包含三个参数:

Corr1DTimeSeriesMap(NetClimatologySubtracted, NAO, WinterIndices);
然后在
Corr1DTimeSeriesMap
中获取切片。但是,正如Bob Gilmore已经指出的那样

最好的编程实践是尽可能地将所有函数彼此解耦。在您的例子中,这意味着
corr1dtimesperiesmap
应该能够独立于您碰巧加入的变量产生有意义的输出

到目前为止,更好的方法是通过允许显式指定标签名来打破对变量名的依赖:

Corr1DTimeSeriesMap(...
    NetClimatologySubtracted(:,:,WinterIndices),...
    NAO(WinterIndices), ...
    {'Net climatology subtracted', 'NAO_{45}'});
它更健壮,还允许使用更漂亮的标签:)

标签(通常)已经是有效的文件名,但为了100%确保,您可以将其与一起使用,从指定的标签生成有效的文件名

或者,您也可以将文件名作为附加参数:

Corr1DTimeSeriesMap(...
    NetClimatologySubtracted(:,:,WinterIndices),...
    NAO(WinterIndices), ...
    {'Net climatology subtracted', 'NAO'},...
    {'NetClimSub.txt', 'NAO.txt'});
Corr1DTimeSeriesMap(...
    NetClimatologySubtracted(:,:,WinterIndices),...
    NAO(WinterIndices), ...
    {'Net climatology subtracted', 'NAO'},...
    {'NetClimSub.txt', 'NAO.txt'});