在Octave 4.0.3中,我无法想出一种传播变量的方法:
> foo=5; > f=foo f = 5 > foo=3; > f f = 5
匿名函数也一样:
> foo=5; > f=@(x) x+foo; > f(0) ans = 5 > foo=3; > f(0) ans = 5 % f closes over the workspace > f=@(x) x+foo; % Reassign, causing a lookup of the value of foo > f(0) ans = 3
如何在工作空间中传播变量(如Geogebra)?
答案 0 :(得分:0)
如果您愿意,可以使用全局变量在命名函数中获得“传播”行为,例如
global foo;
function [a] = f(x) global foo; a = x+foo; end
然后
>> foo = 5
>> f(0)
ans = 5
>> foo = 3;
>> f(0)
ans = 3
请参阅help global
。
否则,请参阅上面的评论。 =
是值运算符的赋值,它不能“通过引用”工作。
另一种选择是使用evalin()
从不同的范围获取变量。见help evalin
。以下函数将产生与上例
function [a] = f(x) a = x+evalin('base','foo'); end
最后一点 - 变量可以通过嵌套函数在函数中传播。看看你是否可以猜出
的输出function [] = f(x)
function [c] = g(y)
c = y + x;
end
disp(g(x));
x=x+1;
disp(g(x));
end
f(0)