进行以下函数调用:
Corr1DTimeSeriesMap(NetClimatologySubtracted(:,:,WinterIndices), NAO(WinterIndices));
如果是Corr1DTimeSeriesMap(NetClimatologySubtracted,NAO);
那么
inputname(1) = 'NetClimatologySubtracted'
和
inputname(2)= 'NAO'
但是,只有inputname
选择后,WinterIndices
才会消失。 inputname
对我来说非常重要,因为我将它们用于我保存文件的图和文件名。
答案 0 :(得分:4)
简短回答;你不能。 INPUTNAME函数就像它一样,并且许多类型的索引表达式“打破”它(即,使它返回空字符串'')。
更长的答案;使用INPUTNAME可以让您的生活更方便,依靠变量名称和索引表达式标记图表是一个糟糕的想法。因为,坦率地说,除非他选择通过将它们嵌入到字符串中来暴露它们,否则在他的代码中命名某人的变量是没有人的事。我已经看到很多诅咒词等用作变量名,特别是在MATLAB代码中;-)
想象一下,如果有人选择使用您的代码,并最终绘制一个OMG_I_HATE_MY_BOSS_SO_MUCH变量。不酷。
它很臭,而且更多的工作,但请拜托,请将标签作为非可选的输入参数。
答案 1 :(得分:4)
您所看到的是完全预期的行为。如果你通过
NetClimatologySubtracted
然后你按原样传递变量。但是,如果你要通过
NetClimatologySubtracted(:,:,WinterIndices)
您传递的是未命名的变量,等于NetClimatologySubtracted
的特定切片。对于未命名的变量没有名称是完全合乎逻辑的。
你可以重新定义你的函数以期望三个参数:
Corr1DTimeSeriesMap(NetClimatologySubtracted, NAO, WinterIndices);
然后取出Corr1DTimeSeriesMap
内的切片。但是,正如Bob Gilmore所指出的,this is a bit smelly。
更好的编程习惯是尽可能地将所有功能彼此分离。在您的情况下,这意味着Corr1DTimeSeriesMap
应该能够独立地生成您输入的变量的 。
Corr1DTimeSeriesMap(...
NetClimatologySubtracted(:,:,WinterIndices),...
NAO(WinterIndices), ...
{'Net climatology subtracted', 'NAO_{45}'});
它更强大,并且允许更漂亮的标签:)
标签(通常)已经是有效的文件名,但为了100%确定,您可以将其与genvarname结合使用,从而生成有效的文件名。
或者,您也可以将文件名作为附加参数:
Corr1DTimeSeriesMap(...
NetClimatologySubtracted(:,:,WinterIndices),...
NAO(WinterIndices), ...
{'Net climatology subtracted', 'NAO'},...
{'NetClimSub.txt', 'NAO.txt'});