函数在Octave中不断重复

时间:2017-07-10 07:07:48

标签: plot octave

我的代码写在一个文件" plot.m"。

如果我将以下代码放入" plot.m",当我调用plot(" 20%")时,Octave GUI将继续打开一个新窗口无限期地说。

function X = plot(folderName)

X = 0;

data =  ([folderName, "\\summary.txt"]);
NUM_SURVIVED = data(1);
NUM_DATA = size(data)(1)-1;
FINAL_WEALTH = data(2 : NUM_DATA);

%plot FINAL_WEALTH

figure;
plot(1:numel(FINAL_WEALTH), FINAL_WEALTH, '-b', 'LineWidth', 2);
xlabel('x');
ylabel('FINAL_WEALTH');

end

但是,如果我将以下代码放在" plot.m"并运行它,程序按预期工作,并将绘制来自" summary.txt"的数据。

data =  ("20%\\summary.txt");
NUM_SURVIVED = data(1);
NUM_DATA = size(data)(1)-1;
FINAL_WEALTH = data(2 : NUM_DATA);

%plot FINAL_WEALTH

figure;
plot(1:numel(FINAL_WEALTH), FINAL_WEALTH, '-b', 'LineWidth', 2);
xlabel('x');
ylabel('FINAL_WEALTH');

知道我在第一段代码中做错了什么吗?我想把它写成一个函数,这样我就可以多次调用它来获取不同的文件夹名称。

2 个答案:

答案 0 :(得分:3)

当你从函数plot调用plot时,你会得到无穷无尽的递归。重命名您的函数及其文件。

答案 1 :(得分:3)

只是添加迈克尔的答案,如果真的想要将您的功能命名为“plot”并覆盖内置的plot功能,但< em>仍然希望能够在其中调用内置 plot函数,这实际上可以通过使用builtin函数来调用plot的内置版本。您的代码将如下所示:

function X = plot (folderName)

  % same code as before

  figure;
  builtin ("plot", 1:numel(FINAL_WEALTH), FINAL_WEALTH, '-b', 'LineWidth', 2);
  xlabel ('x');
  ylabel ('FINAL_WEALTH');

end

显然,首先重载这样一个核心功能是一个好主意是一个完全不同的讨论主题。 (提示:不要!)