2011-02-06 44 views
33

MATLABでグローバル変数を宣言する方法はありますか?私もthe help filesを読むことができるのでMATLABでグローバル変数を宣言する

global x y z; 

で応答しないでください。

私は、グローバル変数、xを宣言した後、このような何かをやった:

function test1() 
    x = 5; 
end 

私はtest()を実行

、私の出力:機能 test1()は、次のように定義されて

function[x] = test() 
    global x; 
    test1(); 
end 

x = []です。 x=5を出力する方法、またはxを定義するものは別の機能にする方法はありますか? C言語では、これは外部変数であり、グローバル変数にするだけでそれを達成できるはずです。

+5

+1少なくとも以下のようになるまで、ヘルプファイルを読むことができます: 'しかし、いくつかの関数、場合によってはベースワークスペース* all *が特定の名前をグローバルとして宣言するならば、それらはすべてその変数。 – Jonas

答えて

46

xを、すべてのスコープ(つまり、関数/ワークスペース)内でglobal variableとして宣言する必要があります。だから、あなたのようにtest1を記述する必要があります。

function test1() 
    global x; 
    x = 5; 
end 
+19

これは正しいです。しかし、 "ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ" – KitsuneYMG

+4

@KitsuneYMG:合意した。グローバル変数はきれいではなく、追跡するのに大きな苦痛ですが、まれにしか必要悪かもしれません。 OPの具体的な状況が何であるかについて私がもっと知っていれば(私は上記のことが単純な例であると思う)、私はおそらくより良いアプローチを提案することができます。 – gnovice

+0

おそらくあなたは私にいくつかのアドバイスを提供することができます。私はいくつかの '.m'ファイルで構成されたプログラムを書いていました。プログラムは行列Aを入力とし、それをある関数に渡します。その関数は行列に何かを行い、それを行列Aを持つ別の関数に渡します。最後に元の行列に戻り、出力された行列をチェックし、最後の関数に渡して行列で何かを行います。私の問題は、関数が関数から正しく渡されているとは思わないので、グローバルに宣言する必要があると思いますか? – Amit

4

グローバル変数を使用してgnoviceに向けてあなたのコメントを参照することはあなたの問題を解決するためのアプローチであるが、それは一般的に使用されないことができます。

まず第一に、あなたの.mファイルが機能ないスクリプトていることを確認してください。 スクリプトは共通のワークスペースを共有しているので、変数を好意的に上書きすることが容易になります。対照的に、関数には独自のスコープがあります。

xUnitを使用して、機能の反復可能な単位テストを生成します。プログラムに含まれる各機能をテストすることにより、エラーの原因を追跡します。単体テストを実施して、さらにコードを変更したことを簡単に確認できます。

+0

お返事ありがとうございます。あなたが言ったことは間違いなく正しいです、+1。グローバル変数を使用する代わりに、関数の戻り値を使用して、main関数で必要な値に等しい値を設定します。このような作業を達成する方法はわかりませんでしたが、それは私が最初にやっていたものです。それは今、美しく動作します、ありがとう! – Amit

1

globalを回避する方法は、変数をappdataに割り当てることです。 setappdatagetappdata関数を使用して、appdataをMATLABウィンドウから割り当てて取得できます。 MATLABセッションがアクティブである限り、0というウィンドウが存在します。

>> setappdata(0,'x',10) % 0 indicates the root MATLAB window 

今変数xは任意のスクリプトまたは関数に見えないが、getappdataを使用して、必要な限りアクセスすることができます。

function test 
    globalX = getappdata(0,'x'); 
    disp(globalX); 
end 

x = 
    10 

良いニュースは、あなただけのに役立つだろう代わりに、一般的なxModelOptimizerOptionsyようAPPDATAフィールドに一意の名前を使用して、名前と慎重で、appdataに任意の有効なMATLABオブジェクトを割り当てることができるということです。これは、コンパイルされた実行可能ファイルとMATLABプロダクションサーバにデプロイされたコードでも機能します。

関連する問題