2016-11-27 149 views
0

在八度4.0.3,我不能想辦法傳播變量的變化:CLOSED八度 - 變量變化的傳播

 
> foo=5; 
> f=foo 
f = 5 
> foo=3; 
> f 
f = 5

同去的匿名函數:

 
> foo=5; 
> [email protected](x) x+foo; 
> f(0) 
ans = 5 
> foo=3; 
> f(0) 
ans = 5    % f closes over the workspace 
> [email protected](x) x+foo;  % Reassign, causing a lookup of the value of foo 
> f(0) 
ans = 3

任何方式在整個工作空間傳播變量變化(如Geogebra)?

+1

編號'='表示將一個值賦值給一個變量,而不是兩個變量的等價值。 – beaker

回答

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) 
+0

這一個爲我工作,謝謝。 –

+0

'evalin'是另一種選擇,變量傳播可以在函數內發生。只是FYI。 – stephematician