八度音阶的全局变量

时间:2016-04-25 06:50:05

标签: global-variables octave

我正在使用GNU Octave,版本3.2.4。

我有两个功能。第一个函数f1.m具有全局变量。我正在另一个函数f2.m。

中访问全局变量

在以下情况下工作正常:

# File f1.m
function testGlobal1()
    clear all;
    global var1 = [];
    testGlobal2();
endfunction

#File f2.m
function testGlobal2()
    global var1;
    isglobal("var1")
    var1
    var1 = [var1, 10]
endfunction

运行f1后的结果如下:

  

ans = 1
  var1 =
  var1 = 10

现在,如果我再次运行f1,结果如下:

  

ans = 1
  var1 = 10
  var1 =
     10 10

随后运行f1,矢量var1继续增长。

我的问题是,为什么变量var1不会在f1(第3行)中重新初始化,即使代码会话(就是它所谓的?)结束了,当我再次运行f1时会开始新的变量?

有趣的是,如果我在f2中为var1赋值,而不是附加到向量上,新值将被赋值给var1。具有修改的f2的代码如下:

function f2()
    global var1;
    isglobal("var1")
    var1
    var1 = [var1, 10]
    var1 = 20
endfunction

运行f1后的输出如下:

  

ans = 1
  var1 =
     10 10
  var1 =
     10 10 10
  var1 = 20

再次运行f1时,会看到以下输出:

  

ans = 1
  var1 = 20
  var1 =
     20 10
  var1 = 20

如果我将var1重新初始化为f2中的空向量,我得到的代码就像我期望的那样。在这种情况下,后续运行f1不会使var1增长,如上所示。

有人可以解释发生了什么吗?为什么在f1中将var1重新初始化为空向量不起作用?

0 个答案:

没有答案