2016-11-15 4 views
-2

私はMATLABでプログラミングを学び、Rでいくつかの経験を積んでいます。私はMATLABのスコープの性質に混乱しています。MATLABのスコープとR

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

Rの場合、2の値を返します。Rは、yの値が入力として渡されない場合、関数の外部をチェックします。しかし、MATLABで、

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

y=1; 
test(1) 

はエラーに

Undefined function or variable 'y' 

を与える誰もがスコープはI、Rでのプログラマは、それが動作するように期待するよりも、MATLABで異なる動作をする理由の背後にあるロジックを説明できますか?

+0

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

+2

をそれは言語がどのように設計されたかです。異なるプログラミング言語間でスコープが同じであることは期待できません。それが有効なR構文であれば、他のほとんどの言語とは異なります。スコープは広くTBHのように思えます。 – excaza

+0

私は参照してください。あなたは、あなたが学んだ最初の言語から常に期待を引き出しますが、これが標準ではないことを知っていれば良いです。ありがとう – Lee88

答えて

3

matlabでは、変数がglobalかどうかを指定しています。私はこれが反対MATLABとIwouldアドバイスで物事の非常に一般的な方法ではありませんが知っている限り

global y; 
y = 1; 
test(1) 

:機能を

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

をしてから呼び出して:あなたはこのような何かを行うことができますそれ。代わりに、すべての変数を関数に渡すだけです。その後、

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

と関数を呼び出す:「そこにISN

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

@ElliotLee同じことを達成する別の方法の提案を追加しました。 – mpaskov

+0

注目。ありがとうございました – Lee88