CLOSED octave - 可变变化传播

CLOSED octave - variable change propagation

在 Octave 4.0.3 中,我想不出传播变量更改的方法:

> foo=5;
> f=富
f = 5
> foo=3;
> 女
f = 5

匿名函数也是如此:

> foo=5;
> f=@(x) x+foo;
> f(0)
答案 = 5
> foo=3;
> f(0)
ans = 5 % f 关闭工作区
> f=@(x) x+foo; % 重新分配,导致查找 foo 的值
> f(0)
ans = 3

有什么方法可以在整个工作区(如 Geogebra)中传播变量更改?

如果您愿意,您可以在具有全局变量的命名函数中获得 'propagation' 行为,例如

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

否则,请参阅上面的评论。 = 是一个赋值运算符,它不起作用 'by reference'.

另一种选择是使用 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)