Matlab 在函数外声明变量
我不知道为什么我不能这样做。为什么我不能在函数使用之前在函数外部声明变量。我得到一个错误,说temp是一个未定义的函数或变量。我意识到我可以将变量传递给函数thisblah(temp),但这不是我想要做的。下面是我想做的事情的缩短/修订版本。我试图在现有函数中添加功能,并想知道我输入了多少次。另外,我知道你可以解决在函数中调用temp变量persistent的问题,但我认为这不是正确的答案。全球也不起作用Matlab 在函数外声明变量,matlab,Matlab,我不知道为什么我不能这样做。为什么我不能在函数使用之前在函数外部声明变量。我得到一个错误,说temp是一个未定义的函数或变量。我意识到我可以将变量传递给函数thisblah(temp),但这不是我想要做的。下面是我想做的事情的缩短/修订版本。我试图在现有函数中添加功能,并想知道我输入了多少次。另外,我知道你可以解决在函数中调用temp变量persistent的问题,但我认为这不是正确的答案。全球也不起作用 temp = 0; for i = 1:5 thisblah en
temp = 0;
for i = 1:5
thisblah
end
function thisblah
temp = temp + 1;
if temp(3)
fprintf('yes a three');
end
fprintf('temp is %d, temp);
end
全球办法:
如上所述,下面是一个全局方法的示例(使temp
成为全局变量)。另外,temp
将不会通过简单地递增第三个索引,temp(3)
。要检查何时输入了3次函数,可以检查如果temp==3
global temp;
temp = 0;
for i = 1: 5
thisblah
end
function thisblah
global temp;
temp = temp + 1;
if temp == 3
fprintf('yes a three\n');
end
fprintf('temp is %d\n', temp);
end
持久性办法: 如果在单独的
.m
文件中创建函数,则只需调用clear thisblah
,而不是clear functions
,后者需要在脚本运行完成后或脚本重新运行前清除持久变量
clc;
for i = 1: 5
thisblah
end
clear functions;
function thisblah
persistent temp
if isempty(temp)
temp = 0;
end
temp = temp + 1;
if temp == 3
fprintf('yes a three\n');
end
fprintf('temp is %d\n', temp);
end
此外,行的语法需要从以下位置更改:
fprintf('temp is %d, temp);
到
使用MATLAB R2019b运行函数有自己的变量范围,请阅读以下内容:最好在函数中添加一个输入和输出,以正确控制它。另一种选择是使
temp
成为持久的或全局的(这应该是可行的,您没有给出详细的原因),但我认为您应该首先了解范围界定的基本知识,“但这不是我想要做的”,在大多数情况下,这是您想要做的,因此,如果您的案例非常特殊,需要另一种方法,那么您应该解释原因(您的问题是排除了最简单/更健壮的方法)。我之所以对这个概念感到困难,是因为它在.m文件中使用。至少从我使用.m文件的方式来看,变量应该保存在该.m文件范围内。例如,在使用.m文件时,不需要“main”函数(我想是吧?),所以当我调用函数时,它们在m文件中浮动。接受回答,谢谢。
fprintf('temp is %d\n', temp);