CLOSED octave - 变量传播

时间:2016-11-27 16:42:28

标签: octave

在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)?

1 个答案:

答案 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)