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