我正在使用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重新初始化为空向量不起作用?