2

Matlab のグローバル変数で非常に奇妙な問題が発生しています。

通常、値を代入する前に変数をグローバルとして宣言すると、その変数は空の変数のままになります。Rグローバルとして宣言したい変数があります。しかし、入力した後clearand global R、変数リストRでは、すでに1 * 18配列に設定されており、いくつかのゼロとその他の数字が埋められています。

グローバル変数 を共有する関数やスクリプトは他にもいくつかありますがR、 を入力した後にスクリプトや関数を呼び出していないことを確認し、プロンプトからclear入力したときに変数リストがすでに空になっていることを確認しました。global R

ここに画像の説明を入力

しかし、それでも問題は解決しません。私は、グローバル変数に関する規則について深刻な誤解をしているに違いないと思います。なぜこれが起こっているのか誰か説明できますか?

前もって感謝します。

4

1 に答える 1

6

このclearコマンドは、グローバル変数をクリアしません。変数はローカル ワークスペースから削除されますが、まだそこにあります。したがって、以前に何らかの値を割り当てた場合、再度宣言すると、ローカル スコープ内のグローバル変数が単純に「表示」されます。clear allまたはを使用する必要がありclear globalます。のドキュメントからclear:

変数名がグローバルの場合、clear はそれを現在のワークスペースから削除しますが、グローバル ワークスペースには残ります。

次の例を検討してください。

>> clear all; 
>> global v;
>> v = 1:100;  % assign global variable
>> whos        % check if it is there

  Name      Size             Bytes  Class     Attributes

  v         1x100              800  double    global    

>> clear;
>> whos       % nothing declared in local workspace
>> global v;
>> whos       % ups, v is not empty!!

  Name      Size             Bytes  Class     Attributes

  v         1x100              800  double    global    

>> clear global;     % you have to clear it properly
>> whos
>> global v          % now it is empty
>> whos
  Name      Size            Bytes  Class     Attributes

  v         0x0                 0  double    global    
于 2012-10-28T15:12:19.457 に答える