2016-11-15 195 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