Matlab 在函数外声明变量

Matlab 在函数外声明变量,matlab,Matlab,我不知道为什么我不能这样做。为什么我不能在函数使用之前在函数外部声明变量。我得到一个错误,说temp是一个未定义的函数或变量。我意识到我可以将变量传递给函数thisblah(temp),但这不是我想要做的。下面是我想做的事情的缩短/修订版本。我试图在现有函数中添加功能,并想知道我输入了多少次。另外,我知道你可以解决在函数中调用temp变量persistent的问题,但我认为这不是正确的答案。全球也不起作用 temp = 0; for i = 1:5 thisblah en

我不知道为什么我不能这样做。为什么我不能在函数使用之前在函数外部声明变量。我得到一个错误,说temp是一个未定义的函数或变量。我意识到我可以将变量传递给函数thisblah(temp),但这不是我想要做的。下面是我想做的事情的缩短/修订版本。我试图在现有函数中添加功能,并想知道我输入了多少次。另外,我知道你可以解决在函数中调用temp变量persistent的问题,但我认为这不是正确的答案。全球也不起作用

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);