如何让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'});