2

进行以下函数调用:

Corr1DTimeSeriesMap(NetClimatologySubtracted(:,:,WinterIndices), NAO(WinterIndices));

如果是Corr1DTimeSeriesMap(NetClimatologySubtracted,NAO);那时

inputname(1) = 'NetClimatologySubtracted'

inputname(2)= 'NAO'

但是inputname一旦我只选择WinterIndices. s对inputname我来说很重要,因为我将它们用于我的绘图和将文件保存为的文件名。

4

2 回答 2

4

简短的回答;你不能。INPUTNAME 函数照此执行,多种索引表达式“破坏”它(即使其返回空字符串 '')。

更长的答案;虽然使用 INPUTNAME 可以让您的生活更方便一些,但依靠变量名称和索引表达式来标记您的图形是一个主意。因为,坦率地说,在他的代码中命名某人的变量是什么人的事,除非他选择通过将它们嵌入到字符串中来公开它们。我见过很多用作变量名的诅咒词等,尤其是在 MATLAB 代码中;-)

想象一下,如果有人选择使用您的代码,并最终绘制了一个 OMG_I_HATE_MY_BOSS_SO_MUCH 变量。不酷。

它很臭,而且工作量更大,但是请,请,请让标签成为非可选的输入参数。

于 2013-10-21T06:04:27.013 回答
4

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

NetClimatologySubtracted

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

NetClimatologySubtracted(:,:,WinterIndices)

您正在传递一个未命名的变量,等于NetClimatologySubtracted. 未命名变量没有名称是完全合乎逻辑的。

您可以重新定义您的函数以期望三个参数:

Corr1DTimeSeriesMap(NetClimatologySubtracted, NAO, WinterIndices);

然后把里面的切片Corr1DTimeSeriesMap。但是,正如 Bob Gilmore 已经指出的那样,这有点臭

将所有功能尽可能地相互分离是一种更好的编程实践。在您的情况下,这意味着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'});
于 2013-10-21T07:37:51.767 回答