2016-11-15 41 views
-2

我正在學習使用MATLAB進行編程,並且在R中有一些經驗。我對MATLAB中的範圍的本質感到困惑。MATLAB中的範圍與R

y <- 1 
test <- function(x) { 
    return(x+y) 
} 
test(1) 
中的R

,此返回2。R檢查一個值的函數之外y的值,當y不爲輸入通過。然而,在MATLAB,

function[ output ] = test(x) 
output=x+y; 

y=1; 
test(1) 

給出了錯誤

Undefined function or variable 'y' 

任何人都可以解釋爲什麼落後範圍,MATLAB行爲不同於我,在R A程序員的邏輯,希望它的工作?

+0

https://www.mathworks.com/help/matlab/matlab_prog/check-variable-scope-in​​-editor.html –

+2

有ISN」邏輯,這就是語言的設計。不應該期望不同的編程語言之間的範圍是相同的。如果這是有效的R語法,那麼它與大多數其他語言不同。範圍廣泛,似乎是一個很不好的主意TBH。 – excaza

+0

我明白了。你總是從你學習的第一語言中獲得期望,但很高興知道這不是常態。謝謝 – Lee88

回答

3

在matlab中,您已指定變量是否爲global。你可以做這樣的事情:

function[ output ] = test(x) 
    global y; 
    output=x+y; 
end 

,然後調用函數:

global y; 
y = 1; 
test(1) 

據我知道這是不是在Matlab和再去讀反對意見的做事很常見的方法它。相反,您應該將所有變量傳遞給該函數。

function[ output ] = test(x,y) 
    output=x+y; 
end 

,然後調用函數:

y = 1; 
test(1,y) 
+0

@ElliotLee請注意,我添加了一個替代方法來完成相同的事情的建議。 – mpaskov

+0

已注意。謝謝 – Lee88